IT-info > C / C++

C / C++

C / C++ network programming

Show IP Address for all networking devices *Linux*
How to List all devices info on your WLAN /router Programmatically in C#
List of all ip address (i.e devices) present in a local area network
Ping in C
Ping: Raw Sockets Method
IcmpSendEcho function
microsoft / Windows-classic-samples - Ping.cpp

Network Programming for Microsoft Windows (PDF)
Windows Sockets 2

Creating a Basic Winsock Application

SDK build environment
"how do i ensure that the build environment refers to the Include, Lib, and Src directories of the Microsoft Windows Software Development Kit (SDK) or the earlier Platform Software Development Kit (SDK)?

Assuming you are talking about the IDE, use Tools + Options, Projects and Solutions, VC++ Directories"

Multicast Programming

Socket Programming in C/C++

server.c:

// Server side C/C++ program to demonstrate Socket programming
#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
#define PORT 8080
int main(int argc, char const *argv[])
{
    int server_fd, new_socket, valread;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};
    char *hello = "Hello from server";     

    // Creating socket file descriptor
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
    {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }     

    // Forcefully attaching socket to the port 8080
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt)))
    {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons( PORT );
    

    // Forcefully attaching socket to the port 8080
    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0)
    {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
    if (listen(server_fd, 3) < 0)
    {
        perror("listen");
        exit(EXIT_FAILURE);
    }
    if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0)
    {
        perror("accept");
        exit(EXIT_FAILURE);
    }
    valread = read( new_socket , buffer, 1024);
    printf("%s\n",buffer );
    send(new_socket , hello , strlen(hello) , 0 );
    printf("Hello message sent\n");
    return 0;
}

client.c:

// Client side C/C++ program to demonstrate Socket programming
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#define PORT 8080

int main(int argc, char const *argv[])
{
    int sock = 0, valread;
    struct sockaddr_in serv_addr;
    char *hello = "Hello from client";
    char buffer[1024] = {0};
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        printf("\n Socket creation error \n");
        return -1;
    }     

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);     

    // Convert IPv4 and IPv6 addresses from text to binary form
    if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0)
    {
        printf("\nInvalid address/ Address not supported \n");
        return -1;
    }     

    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
    {
        printf("\nConnection Failed \n");
        return -1;
    }     

    send(sock , hello , strlen(hello) , 0 );
    printf("Hello message sent\n");
    valread = read( sock , buffer, 1024);
    printf("%s\n",buffer );
    return 0;
}

Compiling:
gcc client.c -o client
gcc server.c -o server

Output:
Client:Hello message sent
Hello from server
Server:Hello from client
Hello message sent

WinSock2.h

#pragma comment(lib, "ws2_32.lib")

#include <iostream>
#include <winsock2.h>
using namespace std;

int main(int argc, char *argv[])
{
    WSADATA wsaData;
    int starterr = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (starterr != 0) {
        cout << "WSADATA startup has failed!" << endl;
        cout << "Error Code: " << WSAGetLastError() << endl;
        system("pause >nul");
        WSACleanup();
        return 0;
    }     

    cout << "WSADATA Startup Successful!" << endl;     

    SOCKET mysock = socket(AF_INET, SOCK_STREAM, 0);
    if (mysock == INVALID_SOCKET) {
        cout << "Socket Creation Failed!" << endl;
        cout << "Error Code: " << WSAGetLastError() << endl;
        system("pause >nul");
        WSACleanup();
        return 0;
    }     

    cout << "Socket Creation Successful!" << endl;     

    // Code mod. allowing user to imput address
    const char ans;
    cout << "Please input server address: " << endl;
    cin>>ans;     

    sockaddr_in sin;
    sin.sin_port = htons(4080);
    sin.sin_addr.s_addr = inet_addr(ans);
    sin.sin_family = AF_INET;     

    if (connect(mysock,(sockaddr*)&sin, sizeof(sin)) == INVALID_SOCKET) {
        cout << "Socket Connection Failed" << endl;
        cout << "Error Code: " << WSAGetLastError() << endl;
        system("pause >nul");
        closesocket(mysock);
        WSACleanup();
        return 0;
    }     

    cout << "Socket successfully connected to " << ans << "!" << endl;     

    char buf[200];
    recv(mysock, buf, sizeof(buf), 0);
    cout << buf;
    cout << "\nClosing connection to server!" << endl;
    WSACleanup();
    closesocket(mysock);
    return 0;
}

firedraco:
const char ans;

You can't have it const if you want the user to be able to input stuff. Also, you need it to be a pointer if you want to store a C-string. Finally, you'll need to allocate memory for the string.

I'd suggest just using an std::string and .c_str() instead though.

beginning:

// Code mod. allowing user to imput address
const char ans;
cout<<"Please input server address: " << endl;
cin >> ans;
//here error

may be this;
char ans[20] = {0};
cout << "Please input server address: " << endl;
cin >> ans;