文章目录
- 流程伪代码
 - 代码实现
 - 加载库
 - 创建套接字
 - 连接服务端
 - 收发数据
 - 关闭套接字、卸载库
 
- 测试
 
 
 
流程伪代码
//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协议简单通讯就写好了。
测试
先运行服务端再运行客户端
 
没有什么问题,可以一人说一句话



















