The contents of this page are licensed under the following license
Windows Sockets

Daytime client
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>

#define BUF_SIZE 1024

int main(int argc, char* argv[])
{
        WORD WRequiredVersion;
        WSADATA WData;
        SOCKET SSocket;
        int nConnect;
        int nBytes;
        struct sockaddr_in stServerAddr;
        struct hostent* lpstServerEnt;
        char cbBuf[BUF_SIZE];

        if (argc != 3)
        {
                fprintf(stderr, "Usage: %s server_name port_number\n", argv[0]);
                exit(1);
        }

        /* initialize winsock */
        WRequiredVersion = MAKEWORD(2, 0);
        if (WSAStartup(WRequiredVersion, &WData) != 0){
                fprintf(stderr, "WSAStartup failed!");
                exit(1);
        }

        /* look up server's IP address */
        lpstServerEnt = gethostbyname(argv[1]);
        if (! lpstServerEnt)
        {
                fprintf(stderr, "%s: Can't get the server's IP address.\n", argv[0]);
                exit(1);
        }

        /* create a socket */
        SSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

        /* server info */
        memset(&stServerAddr, 0, sizeof(struct sockaddr));
        stServerAddr.sin_family = AF_INET;
        memcpy(&stServerAddr.sin_addr.s_addr, lpstServerEnt->h_addr, lpstServerEnt->h_length);
        stServerAddr.sin_port = htons(atoi(argv[2]));

        /* connect to the server */
        nConnect = connect(SSocket, (struct sockaddr*)&stServerAddr, sizeof(struct sockaddr));
        if (nConnect < 0)
        {
                fprintf(stderr, "%s: Can't connect to the server (%s:%i).\n",
                        argv[0], argv[1], atoi(argv[2]));
                exit(1);
        }

        /* connection is now established; read from socket */
        nBytes = recv(SSocket, cbBuf, sizeof(cbBuf), 0);

        cbBuf[nBytes] = '\x0';

        printf("Data from SERVER [%s]:\t%s", argv[1], cbBuf);

        closesocket(SSocket);

        /* terminate use of the winsock */
        WSACleanup();

        return 0;
}

August, 23rd 2006 © Michał Kalewski