Server-side programs:
Server.cpp:Defines the entry point for the console application.
#include "winsock2.h" #pragma comment (lib, "Ws2_32.lib") #include <iostream> using namespace std;
int main (int argc, char* argv[]) {const int buf_size = 64; Wsadata WSD; Wsadata variable SOCKET sserver; Server socket socket sclient; Client socket sockaddr_in Addrserv;; Server address char buf[buf_size]; Receive data buffer char sendbuf[buf_size];//returns the data int retVal to the client;
return value//Initialize the socket dynamic library if (WSAStartup (Makeword (2,2), &WSD)!= 0) {cout << "WSAStartup failed!" << Endl;
return 1;
///Create Socket sserver = socket (af_inet, sock_stream, ipproto_tcp);
if (Invalid_socket = = sserver) {cout << "SOCKET failed!" << Endl;
WSACleanup ();//free socket resource;
return-1;
}//server socket address addrserv.sin_family = af_inet;
Addrserv.sin_port = htons (4999);
ADDRSERV.SIN_ADDR.S_ADDR = Inaddr_any;
Binding Sockets RetVal = Bind (Sserver, (lpsockaddr) &addrserv, sizeof (sockaddr_in)); if (Socket_error = = RetVal) {cout << "bind failed!" << Endl; Closesocket (sserver); Close socket WSACleanup ();
releasing socket resources;
return-1;
//start Listening RetVal = Listen (sserver, 1);
if (Socket_error = = retVal) {cout << "Listen failed!" << Endl; Closesocket (sserver); Close socket WSACleanup ();
releasing socket resources;
return-1;
//Accept client request sockaddr_in addrclient;
int addrclientlen = sizeof (addrclient);
Sclient = Accept (Sserver, (sockaddr far*) &addrclient, &addrclientlen);
if (Invalid_socket = = sclient) {cout << "accept failed!" << Endl; Closesocket (sserver); Close socket WSACleanup ();
releasing socket resources;
return-1;
} while (true) {//Receive client Data ZeroMemory (BUF, buf_size);
RetVal = recv (sclient, buf, buf_size, 0);
if (Socket_error = = retVal) {cout << "recv failed!" << Endl; Closesocket (sserver); Close socket closesocket (sclient); Close socket WSACleanup ();
releasing socket resources;
return-1;
} if (buf[0] = = ' 0 ') break; cout <<
"Client-Sent data:" << buf <<endl;
cout << "Send data to client:";
Cin >> SendBuf;
Send (Sclient, SendBuf, strlen (SENDBUF), 0); }//Exit closesocket (Sserver); Close socket closesocket (sclient); Close socket WSACleanup ();
releasing socket resources;
return 0; }
Client program:
#include "winsock2.h" #include <iostream> #pragma comment (lib, "Ws2_32.lib") using namespace std; BOOL Recvline (SOCKET s, char* buf);
Reads a row of data int main (int argc, char* argv[]) {const int buf_size = 64; Wsadata WSD; Wsadata variable SOCKET shost; Server socket sockaddr_in servaddr; Server address char buf[buf_size];
Receive data buffer char bufrecv[buf_size]; int retVal; return value//Initialize socket dynamic Library if (WSAStartup (Makeword (2,2), &WSD)!= 0) {cout << "WSAStartup failed!" << Endl;
-1;
///Create Socket Shost = socket (af_inet, sock_stream, ipproto_tcp);
if (Invalid_socket = = shost) {cout << "SOCKET failed!" << Endl;
WSACleanup ()//releasing socket resource return-1;
//Set server address servaddr.sin_family =af_inet;
SERVADDR.SIN_ADDR.S_ADDR = inet_addr ("127.0.0.1");
Servaddr.sin_port = htons ((short) 4999);
int nservaddlen = sizeof (SERVADDR);
Connection Server Retval=connect (Shost, (lpsockaddr) &servaddr, sizeof (SERVADDR)); if (Socket_error = = retVal) {cout << "connect failed!" << Endl; closesocket (shost);Close socket WSACleanup ();
Release socket resource return-1;
{(true) {//Send data to Server ZeroMemory (buf, buf_size); cout << send data to server: ";
Cin >> BUF;
RetVal = Send (Shost, buf, strlen (BUF), 0); if (Socket_error = = retVal) {cout << "send failed!" << Endl; closesocket (shost);//Close Socket WSACleanup ();//Release socket
Word resource return-1;
}//recvline (Shost, BUFRECV);
ZeroMemory (BUFRECV, buf_size); Recv (shost, bufrecv,buf_size, 0);
Receive server-side data, receive only 5 characters cout << Endl << "receive data from server:" << bufrecv;
cout<< "\ n"; }//Exit closesocket (Shost); Close socket WSACleanup ();
Release socket resource return 0;
}