C++ realizes simple tcp communication

VC++ integrated development environment
Process
Server side
1, create socket
2, bind the socket to the local address and port (bind)
3, listen on the socket (listen)
4, socket receive connection (accept)
5, Socket to communicate (send/recv)
6, return, wait for another client request
7, close the socket
client
1, create socket
2, send a connection request to the server (connect)
3, communicate with the server ( send/recv)
4. Close the socket


udp
server side
1, create socket
2, socket bind address and port (bind)
3, wait to receive data (recvfrom)
4, close socket
client
1, create socket
2, send data to server (Sendto)
3. Close the socket

TCPSrv engineering
server program

#include<Winsock2.h>
#include<stdio.h>

void main()
{
    
    
//加载套接字库

	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD(1,1);
	
	err = WSAStartup(wVersionRequested,&wsaData);
	if(err!=0){
    
    
		return;	
	}

	if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1){
    
    
		WSACleanup();
		return; 
	}
//公共部分
//创建用于监听的套接字
	SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
	SOCKADDR_IN addrSrv;
	addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	addrSrv.sin_family = AF_INET;
	addrSrv.sin_port = htons(6000);
	
	//绑定套接字
	bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
	//将套接字设为监听模式,准备接收客户请求
	listen(sockSrv,5);
	SOCKADDR_IN addrClient;
	int len = sizeof(SOCKADDR);
	
	while(1)
	{
    
    
		//等待客户请求到来
		SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
		char sendBuf[100];
		sprintf(sendBuf,"Welcome %s to http://www.sunxin.org",inet_ntoa(addrClient.sin_addr));
		//发送数据
		send(sockConn,sendBuf,strlen(sendBuf)+1,0);
		char recvBuf[100];
		//接收数据
		recv(sockConn,recvBuf,100,0);
		//打印接收的数据
		printf("%s\n",recvBuf);
		//关闭套接字
		closesocket(sockConn);
		
	}

}



Client program TcpClient

#include<Winsock2.h>
#include<stdio.h>

void main(){
    
    
//加载套接字库
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	wVersionRequested = MAKEWORD(1,1);

	err = WSAStartup(wVersionRequested,&wsaData);
	if(err != 0)
	{
    
    
		return;
	}

	if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
	{
    
    
		WSACleanup( );
		return;
	}
	//创建套接字
	SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
	SOCKADDR_IN addrSrv;
	addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	addrSrv.sin_family = AF_INET;
	addrSrv.sin_port = htons(6000);
	
	//向服务器发出连接请求
	connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

	//接收数据
	char recvBuf[100];
	recv(sockClient,recvBuf,100,0);
	printf("%s\n",recvBuf);
	//发送数据
	send(sockClient,"this is lisi",strlen("this is lisi")+1,0);
		//关闭套接字
		closesocket(sockClient);
		WSACleanup();
	}


Insert picture description here

There is also the library
ws2_32.lib used

Guess you like

Origin blog.csdn.net/dd_Mr/article/details/108936772