Sample - Simple Client/Server Connection Using Sockets:      Notes   Code
#include "winsock2.h" // reference ws2_32.lib in project settings
#include "iostream.h" // cout

#define IP_ADDRESS "127.0.0.1"
#define PORT_NUMBER 10000

#define MAX_PENDING_CONNECTS 3

void main()
{
/******************************************************************************
	              Initialization of WinSock Library                        
*******************************************************************************/

    WSADATA wsaData;
    WSAStartup( MAKEWORD( 2, 0), &wsaData );

/******************************************************************************
	                    1.a: Opening a socket
*******************************************************************************/

    SOCKET  st = socket( PF_INET, SOCK_STREAM, 0 );
 
    if ( st == INVALID_SOCKET )
    {
        cout << "Invalid Socket:" <<  endl;
        cout << WSAGetLastError() <<  endl;
    }

/*******************************************************************************
	                    1.b: Naming a socket
********************************************************************************/

    u_long  lBinaryIP    = inet_addr( IP_ADDRESS );   
    u_short iNetworkPort = htons( PORT_NUMBER );                                    
 
    SOCKADDR_IN sinServer;                          

    sinServer.sin_family      = AF_INET;     //PF_NET for WinSock 1.1 only!
    sinServer.sin_addr.s_addr = lBinaryIP; 
    sinServer.sin_port        = iNetworkPort;

/*******************************************************************************
	         1.c: Binding name with a socket (server only)
********************************************************************************/

    int iStatus = bind( st, (LPSOCKADDR)&sinServer, sizeof(SOCKADDR_IN) );

    if( iStatus == SOCKET_ERROR )
    {
        cout << "Binding Error:"  <<  endl;
        cout << WSAGetLastError() <<  endl;
    }
    else
    {
        cout << "Binding Passed ..."  <<  endl;
    }
	
/*******************************************************************************
	     2: Turning Socket into Listening State (server-specific)
********************************************************************************/

    iStatus = listen( st, MAX_PENDING_CONNECTS );
    
    if( iStatus == SOCKET_ERROR )
    {
        cout << "Listen Error:"  <<  endl;
        cout << WSAGetLastError() <<  endl;
    }
    else
    {
        cout << "Listen Passed ..."  <<  endl;
    }

/*******************************************************************************
	  Between steps 2 and 3 a client connect to a server and server:
	                3: Accepts Incoming Connection
********************************************************************************/

    SOCKET  stAssociated;
    
    // second parameter is not NULL if we need info on newly created socket
    // (as third paramer - pointer to length of sockaddr_in structure)
    
    stAssociated = accept( st /* a socket that listens */, 
	                   NULL,
	                   NULL );
	                   
    if( stAssociated == INVALID_SOCKET )
    {
        cout << "Accept Error"  <<  endl;
        cout << WSAGetLastError() <<  endl;
    }
    else
    {
        cout << "Accept Passed ..."  <<  endl;
    }

/*******************************************************************************
    Now client and server are both recognized each other and can exchange
    message. Here server sends a message to client (client makes recv()):
	             4: Server Sends a message to client
********************************************************************************/
 
    char szSendString[100];
    strcpy( szSendString, "This message is sent by the Server ..."); 

    if( send( stAssociated /*must be a socket created with accept*/, 
              szSendString, 
              strlen(szSendString), 
              0 /*recommended*/ ) == SOCKET_ERROR )
    {
        cout << "Send Error:" <<  endl;
        cout << WSAGetLastError() <<  endl;
    }
    else
    {
        cout << "Message Send ..." <<  endl;
    }

    Sleep(100000); //to prevent closing of a connection

    WSACleanup();
}
2002, Netston Consulting