联系我们
简单又实用的WordPress网站制作教学
当前位置:网站首页 > 程序开发学习 > 正文

【计算机网络】 基于TCP的简单通讯(客户端)

作者:小教学发布时间:2023-10-01分类:程序开发学习浏览:67


导读:文章目录流程伪代码代码实现加载库创建套接字连接服务端收发数据关闭套接字、卸载库测试流程伪代码//1、加载库//2、创建套接字//3、连接服务端w...

文章目录

    • 流程伪代码
    • 代码实现
      • 加载库
      • 创建套接字
      • 连接服务端
      • 收发数据
      • 关闭套接字、卸载库
    • 测试


在这里插入图片描述

流程伪代码

//1、加载库

//2、创建套接字

//3、连接服务端

while(true){
    //4、发送数据
    
    //5、接收数据
    
}
//6、关闭套接字、卸载库

代码实现

加载库

	int err = 0;
	WORD version = MAKEWORD(2, 2);
	WSADATA wsaData;
	err = WSAStartup(version, &wsaData);
	if (err != 0) {
		cout << "WSAStartup error:" << WSAGetLastError() << endl;
		return 1;
	}
	if (2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion)) {
		cout << "WSAStartup version error" << endl;
		WSACleanup();
		return 1;
	}
	else {
		cout << "WSAStartup success" << endl;
	}

创建套接字

	SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (INVALID_SOCKET == sock) {
		cout << "socket error:" << WSAGetLastError() << endl;
		WSACleanup();
		return 1;
	}
	else {
		cout << "socket success" << endl;
	}

连接服务端

连接服务端我们使用的是connect()函数,分别为连接使用的socket,连接的地址信息,连接的地址信息长度。返回值为int类型,如果没有错误返回0,否则返回SOCKET_ERROR。

	sockaddr_in addrServer;
	addrServer.sin_family = AF_INET;
	addrServer.sin_port = htons(456789);
	addrServer.sin_addr.S_un.S_addr = inet_addr("192.168.44.1");
	int nLen = sizeof(addrServer);
	err = connect(sock, (sockaddr*)&addrServer, nLen);
	if (err == SOCKET_ERROR) {
		cout << "connect error:" << WSAGetLastError() << endl;
		closesocket(sock);
		WSACleanup();
		return 1;
	}
	else {
		cout << "connect success" << endl;
	}

收发数据

	int nSendNum = 0;
	char sendBuf[1024] = "";
	int nRecvNum = 0;
	char recvBuf[1024] = "";

	while (true) {
		//发送数据
		gets_s(sendBuf);
		nSendNum = send(sock, sendBuf, sizeof(sendBuf), 0);
		if (nSendNum == SOCKET_ERROR) {
			cout << "send error:" << WSAGetLastError() << endl;
			break;
		}

		//接收数据
		nRecvNum = recv(sock, recvBuf, sizeof(recvBuf), 0);
		if (nRecvNum < 0) {
			cout << "recv error" << WSAGetLastError() << endl;
			break;
		}
		else {
			cout << "say:" << recvBuf << endl;
		}
	}

关闭套接字、卸载库

	closesocket(sock);
	WSACleanup();

这样我们的TCP协议简单通讯就写好了。

测试

先运行服务端再运行客户端
在这里插入图片描述

没有什么问题,可以一人说一句话





程序开发学习排行
最近发表
网站分类
标签列表