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


在这里插入图片描述

流程伪代码

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

测试

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员懒羊羊

多多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值