Linux下编写UDP/TCP版本的服务器和客户端的流程
Linux下编写UDP/TCP版本的服务器和客户端的流程
文章目录
- Linux下编写UDP/TCP版本的服务器和客户端的流程
- 一:UDP和TCP的区别
- 二、UDP编写服务器的步骤
- 三、UDP编写客户端的步骤
- 四、TCP编写服务器的步骤
- 五、TCP编写客户端的步骤
一:UDP和TCP的区别
- 1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
- 2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,通常情况下是无差错,不丢失,不重复,且按序到达的,(注意,这里的可靠是在通常情况下,在非通常情况下,TCP传送数据并不是不是100%,比如把网线拔了,数据就无法到达,所以TCP的可靠指发送数据后,会收到有一个确认的信号);UDP尽最大努力交付,即不保 证可靠交付,也就是得不到具体的回复,不知道数据是否到达或者没有到达。
- 3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
- 4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
- 5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
- 6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
二、UDP编写服务器的步骤
- 1、创建一个socket,用函数socket();
int socket(int domain, int type, int protocol);
- 2、绑定IP地址、端口等信息到socket上,用函数bind();
int bind(int socket, const struct sockaddr *address,socklen_t address_len);
- 3、循环接收数据,用函数recvfrom();
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
- 4.把服务器处理的数据发送给客户端sendto()
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
- 5、关闭网络连接,断开链接;
三、UDP编写客户端的步骤
- 1、创建一个socket,用函数socket();
int socket(int domain, int type, int protocol);
- 2、
客户端一般不需要bind(),让操作系统内核随机分配一个端口号给客户端使用,因为在通常情况下,一个端口只能被一个进程bind(),此时如果客户端bind(),并且如果有其他客户端同样bind()到同一个端口号,就会出错
- 3、发送数据,用函数sendto();
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
- 4、接收服务器端发送回来的结果,recvfrom()
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
- 5、关闭网络连接;
四、TCP编写服务器的步骤
- 1、创建一个socket,用函数socket();
int socket(int domain, int type, int protocol);
2、设置socket属性,用函数setsockopt(); * 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
- 4、开启监听,用函数listen();
int listen(int s, int backlog);
- 5、接收客户端上来的连接,用函数accept();
int accept(int s, struct sockaddr *addr, socklen_t *addrlen);
- 6、收发数据,用函数send()和recv(),或者read()和write();
int send(int s, const void *msg, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
7、关闭网络连接;
8、关闭监听;
五、TCP编写客户端的步骤
- 1、创建一个socket,用函数socket();
int socket(int domain, int type, int protocol);
2、设置要连接的对方的IP地址和端口等属性;
3、连接服务器,用函数connect();
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
- 4、收发数据,用函数send()和recv(),或者read()和write();
int send(int s, const void *msg, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
- 5、关闭网络连接;
Linux下编写UDP/TCP版本的服务器和客户端的流程相关推荐
- linux udp 端口映射,Linux下的UDP/TCP端口映射(netcat and socat)
原文链接: http://www.wenquan.name/?p=1158 说起来有点土,事到如今才第一次用socat. 不过今天看了一眼,netcat(nc)这东西ms已经N年没有人维护了.最先有个 ...
- linux tcp 丢包命令_在Linux下实现测试TCP和UDP的丢包检测!
在Linux下实现测试TCP和UDP的丢包检测! 疯狂の猿猴 • 2020 年 12 月 11 日 前言 本人平时基本上都是win,一下子转战到linux,有点不习惯! 因此做个记录,便于以后自己查阅 ...
- linux安装DNS服务命令,Linux下的安装和配置DNS服务器
Linux下的安装和配置DNS服务器 发布时间:2008-09-08 17:03:00 作者:佚名 我要评论 在Linux操作系统中使用BIND (Berkeley Internet Name ...
- linux编写php,Linux 下编写一个 PHP 扩展
假设需求 开发一个叫做 helloWord 的扩展. 扩展里有一个函数,helloWord(). echo helloWord('Tom'); //返回:Hello World: Tom 本地环境 P ...
- linux查看远程服务器端口,linux下查看本机和远程服务器的端口是否连通的方法...
linux下查看本机和远程服务器的端口是否连通的方法 如下所示: 1.ssh -v -p [端口号] [用户名]@[IP地址] 2.curl [IP地址]:[端口号] 以上这篇linux下查看本机和远 ...
- 专业的LaTeX: 在Linux下编写高质量的文档
专业的LaTeX: 在Linux下编写高质量的文档 Linux下的OpenOffice.KWord等字处理软件虽然在功能上与Microsoft Word类似,但目前在易用性和可用性方面仍然存在许多不足 ...
- Linux集群和自动化维1.4.2 优化Linux下的内核TCP参数以提高系统性能
1.4.2 优化Linux下的内核TCP参数以提高系统性能 内核的优化跟服务器的优化一样,应本着稳定安全的原则.下面以Squid服务器为例来说明,待客户端与服务器端建立TCP/IP连接后就会关闭Soc ...
- linux搭建mcpe服务器_Ubuntu Linux下搭建Minecraft我的世界服务器
总结一下在Ubuntu Linux下搭建Minecraft我的世界服务器的方法,其实非常简单直接. (1).把当前的软件都更新到最新 sudo apt-get update Minecraft服务器需 ...
- spdlog linux编译出错,Linux下编写Makefile引入第三方库
Linux下编写Makefile引入第三方库 前言:一直在使用CmakaList 生成Makefile文件,其实很少去写Makefile,但是最近帮朋友处理了一个Makefile引入第三方库的问题,就 ...
最新文章
- 使用NSRunloop等待异步任务完成
- WIN 7下绑定网关MAC地址
- 2019年最后的一天_2019最后一天的说说 2019最后一条朋友圈再见2019
- leetcode_zigzag conversion
- Java RMI远程方法调用详解
- nginx架构详解(50%)
- 验证回文串Python解法
- colorWithAlphaComponent
- 今晚十点!鄂尔多斯将屏霸湖南卫视《天天向上》,美爆全国~
- 论文阅读:A machine learning approach to medical image classification:Detecting age-related macular dege
- 蓝牙调试器-划时代无线调试器
- 2012百公里毅行——长沙,湘潭,株洲
- F28335第十二篇——串口拓展(XR16C854)
- 混合云,让你看的清清楚楚明明白白真真切切
- Java批量建立文件夹
- Kibana文档操作
- python爬虫防屏蔽_Python爬虫防封杀方法集合
- 安装 opencv-python 出现Command “python setup.py egg_info“ failed with error code 1 in /tmp/pip-build-npa
- web电子商城实现及源码
- NOIP 2003年普及组 3. 栈