C ++ réalise une communication TCP simple

Environnement de développement intégré VC ++
Process
Server côté
1, créer le socket
2, lier le socket à l'adresse locale et au port (bind)
3, écouter sur le socket (écouter)
4, socket recevoir la connexion (accepter)
5, Socket pour communiquer (envoyer / recevoir)
6, retourner, attendre une autre demande client
7, fermer le
client socket
1, créer socket
2, envoyer une demande de connexion au serveur (se connecter)
3, communiquer avec le serveur ( send / recv)
4. Fermez le socket


udp
côté serveur
1, créez le socket
2, l'adresse et le port de liaison du socket (bind)
3, attendez de recevoir les données (recvfrom)
4, fermez le
client socket
1, créez le socket
2, envoyez les données au serveur (Sendto)
3. Fermez le socket

Programme de
serveur d' ingénierie TCPSrv

#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);
		
	}

}



Programme client 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();
	}


Insérez la description de l'image ici

Et la bibliothèque
ws2_32.lib utilisée

Je suppose que tu aimes

Origine blog.csdn.net/dd_Mr/article/details/108936772
conseillé
Classement