Server (multi-threaded)
#include <iostream> #include <winsock2.h> #pragma comment (lib, "Ws2_32.lib") using namespace std; #define PORT 4000#define ip_address "127.0.0.1" DWORD WINAPI clientthread (LPVOID lpparameter) {socket clientsocket= (socket) Lpparameter;int Ret=0;char Recvbuffer[max_path];while (True) {memset (recvbuffer,0x00,sizeof (Recvbuffer)); Ret=recv ( clientsocket,recvbuffer,max_path,0); if (ret==0| | Ret==socket_error) {cout<< "Exit" <<endl;break;} cout<< "The message Received is:" <<RECVBUFFER<<ENDL;} return 0;} int main () {wsadata Ws; SOCKET serversocket,clientsocket;struct sockaddr_in localaddr,clientaddr;int ret=0;int AddrLen=0; HANDLE Hthread=null;//initif ((WSAStartup (Makeword (2,2), &ws)!=0) {cout<< "Init Failed:" << GetLastError () <<endl;return-1;} Create Socketserversocket=socket (AF_INET,SOCK_STREAM,IPPROTO_TCP); if (Serversocket==invalid_socket) {cout< < "Create Socket Failed:" <<getlasterror () <<endl;return-1;} Localaddr.sin_family=af_inet; Localaddr.sin_addr. S_un.S_ADDR=INET_ADDR (ip_address); Localaddr.sin_port=htons (port); memset (localaddr.sin_zero,0x00,8); Ret=bind (ServerSocket, (struct sockaddr *) & Localaddr,sizeof (LOCALADDR)); if (ret!=0) {cout<< "Bind Socket Failed:" <<getlasterror () <<endl; return-1;} Ret=listen (serversocket,10); if (ret!=0) {cout<< "Listen Socket Failed" <<getlasterror () <<endl; return-1;} cout<< "Server Start" <<endl;while (True) {addrlen=sizeof (CLIENTADDR); Clientsocket=accept (ServerSocket, (struct sockaddr *) &clientaddr,&addrlen); if (clientsocket==invalid_ SOCKET) {cout<< "Accept Failed:" <<getlasterror () <<endl;break;} cout<< "Client Connection::" <<inet_ntoa (CLIENTADDR.SIN_ADDR) << ":" <<ClientAddr.sin_port<<endl; Hthread=createthread (Null,0,clientthread, (LPVOID) clientsocket,0,null); if (hthread==null) {cout<< "Create Thread Failed "<<endl;break;} CloseHandle (hthread);} Closesocket (ServerSocket); closesocket (Clientsocket); WSACleanup (); return 0;}
Client
#include <iostream> #include <winsock2.h> #pragma comment (lib, "Ws2_32.lib") using namespace std; #define PORT 4000#define ip_address "127.0.0.1" int main () {wsadata Ws; SOCKET clientsocket;struct sockaddr_in serveraddr;int ret=0;int addrlen=0;//handle Hthread=null;char SendBuffer[MAX_ Path];//initif (WSAStartup (Makeword (2,2), &ws)!=0) {cout<< "Init Failed" <<endl;return-1;} Createclientsocket=socket (AF_INET,SOCK_STREAM,IPPROTO_TCP); if (clientsocket==invalid_socket) {cout<< " Socket Failed: "<<getlasterror () <<endl;return-1;} Serveraddr.sin_family=af_inet; Serveraddr.sin_addr. S_un. S_ADDR=INET_ADDR (ip_address); Serveraddr.sin_port=htons (port); memset (serveraddr.sin_zero,0x00,8); Ret=connect (Clientsocket, (struct sockaddr *) &serveraddr,sizeof (SERVERADDR)); if (ret==socket_error) {cout<< "Connect ERROR:" <<getlasterror () <<endl;return-1;} else{cout<< "Connect Success" <<ENDL;} while (true) {Cin.getline (sendbuffer,sizeof (Sendbuffer)); Ret=send (CLientsocket,sendbuffer, (int) strlen (Sendbuffer), 0); if (ret==socket_error) {cout<< "Send ERROR:" << GetLastError () <<endl;break;}} Closesocket (Clientsocket); WSACleanup (); return 0;}
Windows Socket Programming