【计算机网络】 基于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协议简单通讯就写好了。
测试
先运行服务端再运行客户端
没有什么问题,可以一人说一句话
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)
- 8[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 9鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版