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

文章目录

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

【计算机网络】 基于TCP的简单通讯(客户端)_第1张图片

流程伪代码

//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协议简单通讯就写好了。

测试

先运行服务端再运行客户端
【计算机网络】 基于TCP的简单通讯(客户端)_第2张图片

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

你可能感兴趣的:(计算机网络(网络编程),计算机网络,tcp/ip,网络)