A network socket is an internal endpoint for sending or receiving data at a single node in a computer network. I write a Echo Program Demo that will send what it receives.

Code of server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "stdafx.h"
#include "ws2tcpip.h"
#include "winsock2.h"
#pragma comment (lib,"ws2_32.lib") //load ws2_32.dll

#define BUF_SIZE 100

int _tmain(int argc, _TCHAR* argv[])
{
	//initialize struct WSADATA
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData); //version:2.2

	//create server socket
	SOCKET serverSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //IPv4 address, TCP protocol

	//bind socket
	sockaddr_in sockAddr;
	memset(&sockAddr, 0, sizeof(sockAddr));
	sockAddr.sin_family = AF_INET; //IPv4 address
	inet_pton(AF_INET, "127.0.0.1", &sockAddr.sin_addr); //LOCALHOST IP address
	sockAddr.sin_port = htons(1234); //port number
	bind(serverSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));

	//listen
	listen(serverSock, 20); //20: length of request queue

	//receive request from client
	SOCKADDR clientAddr;
	int nSize = sizeof(SOCKADDR);
	char buffer[BUF_SIZE] = { 0 };
	while (1) {
		SOCKET clientSock = accept(serverSock, &clientAddr, &nSize); //accept request from client
		int strLen = recv(clientSock, buffer, BUF_SIZE, 0); //receive data from client
		printf("string from client: %s\n", buffer);
		send(clientSock, buffer, strLen, 0); //send data to client
		closesocket(clientSock); //close client socket
		memset(buffer, 0, BUF_SIZE);
	}

	//close server socket
	closesocket(serverSock);

	//terminate use of ws2_32.dll
	WSACleanup();

	return 0;
}

Code of client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "stdafx.h"
#include "ws2tcpip.h"
#include "winsock2.h"
#pragma comment (lib,"ws2_32.lib") //load ws2_32.dll

#define BUF_SIZE 100

int _tmain(int argc, _TCHAR* argv[])
{
	//initialize struct WSADATA
	WSADATA wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData); //version:2.2

	//send request to server
	sockaddr_in sockAddr;
	memset(&sockAddr, 0, sizeof(sockAddr));
	sockAddr.sin_family = AF_INET; //IPv4 address
	inet_pton(AF_INET, "127.0.0.1", &sockAddr.sin_addr); //LOCALHOST IP address
	sockAddr.sin_port = htons(1234); //port number
	
	char bufferSend[BUF_SIZE] = { 0 };
	char bufferRecv[BUF_SIZE] = { 0 };
	
	while (1) {
		//create server socket
		SOCKET clientSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //IPv4 address, TCP protocol
		connect(clientSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));

		printf("Input s string: ");
		gets_s(bufferSend);
		send(clientSock, bufferSend, strlen(bufferSend), 0); //send data to server

		recv(clientSock, bufferRecv, BUF_SIZE, 0); //receive data from server
		printf("string from server: %s\n", bufferRecv);

		closesocket(clientSock); //close client socket
		memset(bufferSend, 0, BUF_SIZE);
		memset(bufferRecv, 0, BUF_SIZE);
	}

	//terminate use of ws2_32.dll
	WSACleanup();

	return 0;
}

Reference