Socket通信学习(套字接)

Socket通信主要分两种:TCP协议和UDP协议

TCP:Transmission Control Protocol

UDP:User Datagram Protocol

TCP/IP四层参考模型从上到下可分为四层:
4、应用层(Application):为用户提供所需要的各种服务
3、传输层(Transport):为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性
2、网际层(Internet):主要解决主机到主机的通信问题
1、网络接口层(Network Access):负责监视数据在主机和网络之间的交换

还有一种是五层协议的体系结构,是专门为介绍网络原理而设计的,与TCP/IP四层模型唯一不同的就是将网络接口层分为了数据链路层和物理层,在实际的应用中还是使用TCP/IP四层模型的。

TCP和UDP协议在传输层实现。

  1. 连接路由器,由于路由器开启了ap隔离,所以连接同一个wifi的电脑之间无法ping通,路由器关闭ap隔离就行了。
  2. 查看两个ip是否在同一个网段

如:

将ip4地址变成二进制

192.168.31.252

11000000.10101000.00011111.11111100

192.168.31.139

11000000.10101000.00011111.10001011

255.255.255.0

11111111.11111111.11111111.00000000

192.168.31.252和255.255.255.0做与操作

11000000.10101000.00011111.00000000

192.168.31.139和255.255.255.0做与操作

11000000.10101000.00011111.00000000

故192.168.31.252和192.168.31.139 在同一个网段

客户端和服务端代码:

客户端  tcp+udp
#include <iostream>
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>#pragma comment(lib,"ws2_32.lib")//using namespace std;
int main()
{WORD wVersionRequested;WSADATA wsaData;int err;/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */wVersionRequested = MAKEWORD(2, 2);err = WSAStartup(wVersionRequested, &wsaData);if (err != 0) {/* Tell the user that we could not find a usable *//* Winsock DLL.                                  */printf("WSAStartup failed with error: %d\n", err);return 1;}//TCP协议//客户端主要三个操作//socket,connect,send//创建socket//SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);创建连接服务端的ip地址和端口号保持正确//sockaddr_in serveraddr;//serveraddr.sin_family = AF_INET;//serveraddr.sin_port = htons(12345);//serveraddr.sin_addr.s_addr = inet_addr("10.82.16.10");//err = connect(client, (sockaddr*)&serveraddr, sizeof(serveraddr));//int num = WSAGetLastError();//std::cout << err << std::endl;//std::cout << "connect....." << std::endl;发送消息//err = send(client, "hello", sizeof("hello"), 0);//std::cout << err << std::endl;//std::cout << "send....." << std::endl;//TCP协议//UDP协议SOCKET client = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);//创建连接//服务端的ip地址和端口号保持正确sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(12345);serveraddr.sin_addr.s_addr = inet_addr("10.82.16.10");//发送消息err = sendto(client, "hello", sizeof("hello"), 0, (sockaddr*)&serveraddr, sizeof(serveraddr));std::cout << err << std::endl;std::cout << "send....." << std::endl;//UDP协议WSACleanup();std::cout << "Hello World!\n";
}
服务端 tcp+udp
#include <iostream>
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>#pragma comment(lib, "ws2_32.lib")//服务器socket通信
//using namespace std;
int main()
{WORD wVersionRequested;WSADATA wsaData;int err;/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */wVersionRequested = MAKEWORD(2, 2);err = WSAStartup(wVersionRequested, &wsaData);if (err != 0) {/* Tell the user that we could not find a usable *//* Winsock DLL.                                  */printf("WSAStartup failed with error: %d\n", err);return 1;}/TCP传输//五个步骤 //socket、bing、listen、accept、recv//tcp传输//ipv4和tcp协议//创建套接字//SOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//绑定信息,需要地址信息//sockaddr_in serveraddr;//serveraddr.sin_family = AF_INET;htons的作用是//serveraddr.sin_port = htons(12345);//serveraddr.sin_addr.s_addr = inet_addr("10.82.16.10");//err = bind(server,(sockaddr*)&serveraddr,sizeof(serveraddr));监听客户机传来的消息//err = listen(server, 5);//std::cout << "listen...." << std::endl;处理连接请求//sockaddr_in clientaddr;//int len = sizeof(clientaddr);//SOCKET client = accept(server, (sockaddr*)&clientaddr, &len);接受客户机的消息//char recvdata[1024] = { 0 };为了防止溢出,设置成1023//recv(client, recvdata,1023,0);//std::cout << recvdata << std::endl;/TCP传输/UDP传输//创建套接字SOCKET server = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);//绑定信息,需要地址信息sockaddr_in serveraddr,clientaddr;serveraddr.sin_family = AF_INET;//htons的作用是serveraddr.sin_port = htons(12345);serveraddr.sin_addr.s_addr = inet_addr("10.82.16.10");err = bind(server, (sockaddr*)&serveraddr, sizeof(serveraddr));接受客户机的消息char recvdata[1024] = { 0 };//len一定要 =sizeof(clientaddr),不然无法通过recvfrom =-1;int len =sizeof(clientaddr);while (1){if (recvfrom(server, recvdata, 1023, 0, (sockaddr*)&clientaddr, &len) != -1){std::cout << recvdata << std::endl;}    } std::cout << recvdata << std::endl;/UDP传输WSACleanup();std::cout << "Hello World!\n";
}

socket通信 tcp协议和udp协议 C++相关推荐

  1. TCP协议和UDP协议的区别及其应用

    下面是TCP和UDP的简单程序: 简单的TCP网络程序 https://blog.csdn.net/qq_37941471/article/details/80738319 简单的UDP网络程序 ht ...

  2. doraemon的python tcp协议和udp协议

    ### 8.9 tcp协议和udp协议#### 8.9.1 tcp协议 -------打电话 特点:- ​ 可靠 慢 全双工通信 - ​ 建立连接的时候:三次握手 - ​ 断开连接的时候:四次挥手 - ...

  3. tcp协议和udp协议区别_TCP和UDP协议有什么区别?

    tcp协议和udp协议区别 TCP and UDP are two protocols that are part of the transport layer in a TCP/IP model o ...

  4. 传输层TCP协议和UDP协议

    传输层协议 文章目录 传输层协议 传输层: 传输层协议: UDP协议: TCP协议: UDP协议和TCP协议的比较: 适用场景: 传输层: 传输层是OSI中最重要,最关键的一层,是唯一负责总体的数据传 ...

  5. TCP协议和UDP协议的区别

    目录 一.简介UDP和TCP来源 OSI七层结构 TCP/IP协议模型 二.TCP协议: 1.TCP的功能: 2.UDP的代码实现: 3.TCP协议的组成: 4.TCP的连接管理:TCP的三次握手(建 ...

  6. TCP协议和UDP协议头部结构

    UDP协议 源端口号,目的端口号:发送端和接收端的端口号 长度:UDP用户数据报的长度,最小值是8字节(只有首部) 校验和:检测UDP用户数据报在传输中是否出错,出错就丢弃 源端口号,目的端口号:发送 ...

  7. TCP协议和UCP协议的异同

    TCP和UDP 1.共同点: 同属于传输层协议 2.不同点 TCP:有连接,可靠 UDP:无连接,不保证可靠 TCP:  (Transfer Control Protocol 传输控制协议) (1). ...

  8. 1.前端计网篇之HTTP协议和HTTPS协议

    目录 1.HTTP协议 1)GET和POST请求的区别 2)POST和PUT请求的区别 3)常见的HTTP请求头和响应头 (1)HTTP Request Header常见的请求头: (2)HTTP R ...

  9. jt808终端鉴权_驾培协议和jt808协议的区别 | 车载GPS和视频平台产品经理

    交通部颁发的<机动车驾驶员计时培训系统平台技术规范>中的驾培TCP协议和jt808协议虽然很像,但有本质的不同,很多人以为就是部标808协议,这个认识是错误的,驾培协议是驾培协议,jt80 ...

最新文章

  1. QIIME 2教程. 01简介和安装 Introduction Install(2020.11开始更新)
  2. appium 移动端自动化测试工具(4)
  3. 高等数学下-赵立军-北京大学出版社-题解-练习9.2
  4. 3dmax模型转换为*.FLT格式的建模要点
  5. 详解3D点云分割网络 Cylindrical and Asymmetrical 3D Convolution Networksfor LiDAR Segmentation
  6. Eclipse高级使用技巧
  7. 解决sonar scanner扫描报错Please provide compiled classes of your project with sonar.java.binaries property
  8. 【Spark】Spark基本概念
  9. .net ef 字段不区分大小写_第六节:框架搭建之EF的Fluent Api模式的使用流程
  10. 曲奇云盘资源搜索引擎_曲奇云盘下载-曲奇云盘官网版v3.2.4-sosyes
  11. 苏宁小店上线咖啡业务,成为国内O2O社区便利店的创领者!
  12. C#panel渐变绘制
  13. 有孚网络协办“大数据助力精准医疗产业论坛”北京站圆满落幕
  14. inflate方法的用法
  15. 智能手机平台:TI,Intel,Moto
  16. 多个HTML页面公用头部尾部
  17. 不同数据库之间表数据的copy及CPY 0012错误的解决办法
  18. Adobe Photoshop CS5.1 Extended 12.1中文特别版
  19. mysql授权用户grant all_Mysql授权GRANT ALL PRIVILEGES
  20. 【论文笔记】MLFF-GAN:A Multilevel Feature Fusion WithGAN for Spatiotemporal Remote Sensing Images

热门文章

  1. Idea(11):强制关闭Tomcat后,重启tomcat提示端口8080被占用
  2. 小马哥----高仿HTC D816刷机拆机主板图与开机界面图 6582芯片1:1精仿 分新旧 移动版与联通版分别
  3. python多个返回值
  4. 【linux软件安装】rpm安装卸载命令
  5. 汤姆大叔的博客 -【1】编写高质量JavaScript代码的基本要点
  6. 超详细的图片预加载和懒加载教程
  7. Densepose安装教程
  8. 〖Python APP 自动化测试实战篇⑦〗- 实战 - appium 定位手机元素的超级方法 - uiautomator
  9. 手机怎么设置每日喝水提醒
  10. WebRTC:如何编译Windows版本的WebRTC(M66)