-----------This is the client program--------------#include "stdio.h" #include "winsock2.h" #include "Stdlib.h" # Pragma comment (Lib, "Ws2_32") Void main () { wsadata wsadata; wsastartup (Makeword (2,2), &wsadata); socket s = socket (PF _INET,SOCK_STREAM,IPPROTO_TCP); sockaddr_in sockaddr; Sockaddr.sin_family = pf_inet; sockaddr.sin_addr. S_un. S_ADDR = INET_ADDR ("127.0.0.1"); sockaddr.sin_port = htons (9000); connect (S, (sockaddr*) &sockaddr,sizeof (sockaddr)); char  BUFFER[MAXBYTE] = {0};    RECV (s,buffer,maxbyte,null); printf (" ***server*** %s", buffer); while (TRUE) { char* mymsg = new char[10000]; printf (" OK Now You Can Connect .\n -> "); gets (mymsg); send (S,mymsg,strlen (mymsg) +sizeof (char), NULL ); } closesocket (s); wsacleanup (); getchar (); exit (0); }
-----This is a server-side program------
#include "stdio.h" #include "winsock2.h" #include "stdlib.h" #define maxclients 2#pragma comment (Lib, "Ws2_32")/* multithreading socket*/dword winapi processclientrequest (Lpvoid lpparam) { SOCKET* clientsocket = (socket*) lpparam; char* msg = "hello, welcome to connect . \r\n"; send (*clientsocket, Msg,strlen (msg) +sizeof (char), NULL); printf ("---SYS---- hello @[email protected]\n "); while (TRUE) { char buffer[MAXBYTE] = {0}; &NBSP;&NBSP;&NBSP;RECV (*clientsocket,buffer,maxbyte,null); if ( strcmp (buffer, "exit") ==0) &Nbsp; { char* exit_msg = "bye \r\n"; send (*clientsocket,exit_msg,strlen (exit_msg) +sizeof (char), NULL); break; } &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;PRINTF ("--- sys: %s--\n", buffer); } closesocket (*clientsocket); return 0;} Int main () { wsadata wsadata; wsastartup (MAKEWORD (2,2), &wsadata); socket s = socket (PF_INET,SOCK_STREAM,IPPROTO_TCP); sockaddr_in sockaddr; sockaddr.sin_family = PF_INET; sockaddr.sin_addr. S_un. S_ADDR&NBSP;=&NBSP;INET_ADDR ("127.0.0.1"); sockaddr.sin_port = htons (9000); bind (S, (sockaddr*) &sockaddr,sizeof (sockaddr)); listen (s,1); printf ("listening on port[%d].\n", 9000); char* msg = new char[1000]; handle threads[ maxclients]; //thread storage Arrays int CountClient = 0; while (TRUE) { Sockaddr clientaddr; int size = sizeof ( SOCKADDR); socket clientsocket; clientsocket = accept (s,&clientaddr,&size); //blocking mode until there is a new tcp access printf ("sys: new Client touched id is %d .\n ", countclient+1); // if (CountClient < maxclients) //creating a new thread { threads[countclient ++] = createthread (null,0,&processclientrequest,&clientsocket,0,null); } else //number of threads over denial of service { char *msg = " error too many client connecttion !. \ r \ n "; send ( Clientsocket,msg,strlen (msg) +sizeof (char), NULL); printf (" ** sys ** refused !. \ n "); Closesocket (Clientsocket); } } printf ("maximize clients occurred for d%.\r\n", MAXCLIENTS); &nBsp; waitformultipleobjects (Maxclients,threads,true,infinite); Closesocket (s); //off Socket for (int i=0;i<maxclients;i++) { closehandle (Threads[i]); } wsacleanup (); getchar (); exit (0); return 0;}
A multi-threaded socket Communication Demo (C language Implementation)