客户端与服务器端的通讯,C++书写步骤。

客户端与服务器端的通讯,C++书写步骤。,第1张

要实现客户端与服务器端的通讯,需要两部分C++的程序:服务器端程序代码和客户端代码。

首先是服务器端程序代码:

#include <WinSock2.h>

#include <stdio.h>

#include <stdlib.h> 

#pragma comment(lib, "ws2_32.lib")

void main()

{

WSADATA wsaData

int port = 5099

char buf[] = "Server: hello, I am a server....."

if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)

{

printf("Failed to load Winsock")

return

//创建用于监听的套接

SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0)

SOCKADDR_IN addrSrv

addrSrv.sin_family = AF_INET

addrSrv.sin_port = htons(port)//1024以上的端口号

addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY)

int retVal = bind(sockSrv, (LPSOCKADDR)&addrSrv, sizeof(SOCKADDR_IN))

if(retVal == SOCKET_ERROR){

printf("Failed bind:%d\n", WSAGetLastError())

return

}

if(listen(sockSrv,10) ==SOCKET_ERROR){

printf("Listen failed:%d", WSAGetLastError())

return

}

SOCKADDR_IN addrClient

int len = sizeof(SOCKADDR)

while(1)

{

//等待客户请求到来

SOCKET sockConn = accept(sockSrv, (SOCKADDR *) &addrClient, &len)

if(sockConn == SOCKET_ERROR){

printf("Accept failed:%d", WSAGetLastError())

break

}

printf("Accept client IP:[%s]\n", inet_ntoa(addrClient.sin_addr))

//发送数据

int iSend = send(sockConn, buf, sizeof(buf) , 0)

if(iSend == SOCKET_ERROR){

printf("send failed")

break

}

char recvBuf[100]

memset(recvBuf, 0, sizeof(recvBuf))

//      //接收数据

recv(sockConn, recvBuf, sizeof(recvBuf), 0)

printf("%s\n", recvBuf)

closesocket(sockConn)

}

closesocket(sockSrv)

WSACleanup()

system("pause")

}

接下来是客户端代码:

#include <WinSock2.h> 

#include <stdio.h>

#pragma comment(lib, "ws2_32.lib")

void main()

{

//加载套接字

WSADATA wsaData

char buff[1024]

memset(buff, 0, sizeof(buff))

if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)

{

printf("Failed to load Winsock")

return

}

SOCKADDR_IN addrSrv

addrSrv.sin_family = AF_INET

addrSrv.sin_port = htons(5099)

addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1")

//创建套接字

SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0)

if(SOCKET_ERROR == sockClient){

printf("Socket() error:%d", WSAGetLastError())

return

}

//向服务器发出连接请求

if(connect(sockClient, (struct  sockaddr*)&addrSrv, sizeof(addrSrv)) == INVALID_SOCKET){

printf("Connect failed:%d", WSAGetLastError())

return

}else

{

//接收数据

recv(sockClient, buff, sizeof(buff), 0)

printf("%s\n", buff)

}

//发送数据

char buff = "hello, this is a Client...."

send(sockClient, buff, sizeof(buff), 0)

//关闭套接字

closesocket(sockClient)

WSACleanup()

}

客户-服务器方式是最常用的传统方式,客户是服务请求方,服务器是服务提供方,可同时处理多个远地或本地客户的请求。

对等通信是两台主机在通信时并不区分哪个是服务器请求方还是服务提供方,只要两台主机都运行了对等连接软件,就可以平等的,对等连接通信。

相同的地方就是都能得到想要的服务,只不过前者可能速度较慢。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/655013.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-23
下一篇2023-07-23

发表评论

登录后才能评论

评论列表(0条)

    保存