当前位置: 首页 > news >正文

【计算机网络】 基于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协议简单通讯就写好了。

测试

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

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

http://www.lryc.cn/news/179363.html

相关文章:

  • RabbitMQ配置
  • 火热报名中 | 2天峰会、20+热门议题,AutoESG 2023数智低碳---中国汽车碳管理创新峰会亮点抢先看!
  • 机器学习——seaborn实用画图方法简介
  • leetCode 188.买卖股票的最佳时机 IV 动态规划 + 状态压缩
  • Lua学习笔记:debug.sethook函数
  • 信息化发展74
  • Go-Ldap-Admin | openLDAP 同步钉钉、企业微信、飞书组织架构实践和部分小坑
  • elasticsearch+logstash+kibana整合(ELK的使用)第一课
  • 宝塔 php修改了php.ini配置不生效
  • Unrecognized option ‘stream_loop‘.(版本不匹配,利用make编译安装)
  • 【考研数学】概率论与数理统计 —— 第三章 | 二维随机变量及其分布(2,常见的二维随机变量及二维变量的条件分布和独立性)
  • 力扣 -- 10. 正则表达式匹配
  • Spring源码分析(四) Aop全流程
  • 定义现代化实时数据仓库,SelectDB 全新产品形态全面发布
  • Linux系统编程(七):线程同步
  • Arcgis克里金插值报错:ERROR 999999: 执行函数时出错。 表名无效。 空间参考不存在。 ERROR 010429: GRID IO 中存在错误
  • 【网络协议】ARP协议
  • 安防视频/集中云存储平台EasyCVR(V3.3)部分通道显示离线该如何解决?
  • 软件测试经典面试题:如何进行支付功能的测试?
  • SolidWorks 入门笔记03:生成工程图和一键标注
  • 【Java】对象内存图多个对象同一内存地址
  • Python 笔记05(装饰器的使用)
  • 记忆化搜索,901. 滑雪
  • 计算机网络:连接世界的纽带
  • SpringMVC 学习(三)注解开发
  • 0x84加密数据传输服务
  • Vue.js快速入门:构建现代Web应用
  • Scala第五章节
  • erlang练习题(三)
  • What Is A DNS Amplification DDoS Attack?