socket通信 tcp协议和udp协议 C++
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协议在传输层实现。
- 连接路由器,由于路由器开启了ap隔离,所以连接同一个wifi的电脑之间无法ping通,路由器关闭ap隔离就行了。
- 查看两个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++相关推荐
- TCP协议和UDP协议的区别及其应用
下面是TCP和UDP的简单程序: 简单的TCP网络程序 https://blog.csdn.net/qq_37941471/article/details/80738319 简单的UDP网络程序 ht ...
- doraemon的python tcp协议和udp协议
### 8.9 tcp协议和udp协议#### 8.9.1 tcp协议 -------打电话 特点:- 可靠 慢 全双工通信 - 建立连接的时候:三次握手 - 断开连接的时候:四次挥手 - ...
- 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 ...
- 传输层TCP协议和UDP协议
传输层协议 文章目录 传输层协议 传输层: 传输层协议: UDP协议: TCP协议: UDP协议和TCP协议的比较: 适用场景: 传输层: 传输层是OSI中最重要,最关键的一层,是唯一负责总体的数据传 ...
- TCP协议和UDP协议的区别
目录 一.简介UDP和TCP来源 OSI七层结构 TCP/IP协议模型 二.TCP协议: 1.TCP的功能: 2.UDP的代码实现: 3.TCP协议的组成: 4.TCP的连接管理:TCP的三次握手(建 ...
- TCP协议和UDP协议头部结构
UDP协议 源端口号,目的端口号:发送端和接收端的端口号 长度:UDP用户数据报的长度,最小值是8字节(只有首部) 校验和:检测UDP用户数据报在传输中是否出错,出错就丢弃 源端口号,目的端口号:发送 ...
- TCP协议和UCP协议的异同
TCP和UDP 1.共同点: 同属于传输层协议 2.不同点 TCP:有连接,可靠 UDP:无连接,不保证可靠 TCP: (Transfer Control Protocol 传输控制协议) (1). ...
- 1.前端计网篇之HTTP协议和HTTPS协议
目录 1.HTTP协议 1)GET和POST请求的区别 2)POST和PUT请求的区别 3)常见的HTTP请求头和响应头 (1)HTTP Request Header常见的请求头: (2)HTTP R ...
- jt808终端鉴权_驾培协议和jt808协议的区别 | 车载GPS和视频平台产品经理
交通部颁发的<机动车驾驶员计时培训系统平台技术规范>中的驾培TCP协议和jt808协议虽然很像,但有本质的不同,很多人以为就是部标808协议,这个认识是错误的,驾培协议是驾培协议,jt80 ...
最新文章
- QIIME 2教程. 01简介和安装 Introduction Install(2020.11开始更新)
- appium 移动端自动化测试工具(4)
- 高等数学下-赵立军-北京大学出版社-题解-练习9.2
- 3dmax模型转换为*.FLT格式的建模要点
- 详解3D点云分割网络 Cylindrical and Asymmetrical 3D Convolution Networksfor LiDAR Segmentation
- Eclipse高级使用技巧
- 解决sonar scanner扫描报错Please provide compiled classes of your project with sonar.java.binaries property
- 【Spark】Spark基本概念
- .net ef 字段不区分大小写_第六节:框架搭建之EF的Fluent Api模式的使用流程
- 曲奇云盘资源搜索引擎_曲奇云盘下载-曲奇云盘官网版v3.2.4-sosyes
- 苏宁小店上线咖啡业务,成为国内O2O社区便利店的创领者!
- C#panel渐变绘制
- 有孚网络协办“大数据助力精准医疗产业论坛”北京站圆满落幕
- inflate方法的用法
- 智能手机平台:TI,Intel,Moto
- 多个HTML页面公用头部尾部
- 不同数据库之间表数据的copy及CPY 0012错误的解决办法
- Adobe Photoshop CS5.1 Extended 12.1中文特别版
- mysql授权用户grant all_Mysql授权GRANT ALL PRIVILEGES
- 【论文笔记】MLFF-GAN:A Multilevel Feature Fusion WithGAN for Spatiotemporal Remote Sensing Images
热门文章
- Idea(11):强制关闭Tomcat后,重启tomcat提示端口8080被占用
- 小马哥----高仿HTC D816刷机拆机主板图与开机界面图 6582芯片1:1精仿 分新旧 移动版与联通版分别
- python多个返回值
- 【linux软件安装】rpm安装卸载命令
- 汤姆大叔的博客 -【1】编写高质量JavaScript代码的基本要点
- 超详细的图片预加载和懒加载教程
- Densepose安装教程
- 〖Python APP 自动化测试实战篇⑦〗- 实战 - appium 定位手机元素的超级方法 - uiautomator
- 手机怎么设置每日喝水提醒
- WebRTC:如何编译Windows版本的WebRTC(M66)