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版本的服务器和客户端的流程相关推荐

  1. linux udp 端口映射,Linux下的UDP/TCP端口映射(netcat and socat)

    原文链接: http://www.wenquan.name/?p=1158 说起来有点土,事到如今才第一次用socat. 不过今天看了一眼,netcat(nc)这东西ms已经N年没有人维护了.最先有个 ...

  2. linux tcp 丢包命令_在Linux下实现测试TCP和UDP的丢包检测!

    在Linux下实现测试TCP和UDP的丢包检测! 疯狂の猿猴 • 2020 年 12 月 11 日 前言 本人平时基本上都是win,一下子转战到linux,有点不习惯! 因此做个记录,便于以后自己查阅 ...

  3. linux安装DNS服务命令,Linux下的安装和配置DNS服务器

    Linux下的安装和配置DNS服务器 发布时间:2008-09-08 17:03:00   作者:佚名   我要评论 在Linux操作系统中使用BIND (Berkeley Internet Name ...

  4. linux编写php,Linux 下编写一个 PHP 扩展

    假设需求 开发一个叫做 helloWord 的扩展. 扩展里有一个函数,helloWord(). echo helloWord('Tom'); //返回:Hello World: Tom 本地环境 P ...

  5. linux查看远程服务器端口,linux下查看本机和远程服务器的端口是否连通的方法...

    linux下查看本机和远程服务器的端口是否连通的方法 如下所示: 1.ssh -v -p [端口号] [用户名]@[IP地址] 2.curl [IP地址]:[端口号] 以上这篇linux下查看本机和远 ...

  6. 专业的LaTeX: 在Linux下编写高质量的文档

    专业的LaTeX: 在Linux下编写高质量的文档 Linux下的OpenOffice.KWord等字处理软件虽然在功能上与Microsoft Word类似,但目前在易用性和可用性方面仍然存在许多不足 ...

  7. Linux集群和自动化维1.4.2 优化Linux下的内核TCP参数以提高系统性能

    1.4.2 优化Linux下的内核TCP参数以提高系统性能 内核的优化跟服务器的优化一样,应本着稳定安全的原则.下面以Squid服务器为例来说明,待客户端与服务器端建立TCP/IP连接后就会关闭Soc ...

  8. linux搭建mcpe服务器_Ubuntu Linux下搭建Minecraft我的世界服务器

    总结一下在Ubuntu Linux下搭建Minecraft我的世界服务器的方法,其实非常简单直接. (1).把当前的软件都更新到最新 sudo apt-get update Minecraft服务器需 ...

  9. spdlog linux编译出错,Linux下编写Makefile引入第三方库

    Linux下编写Makefile引入第三方库 前言:一直在使用CmakaList 生成Makefile文件,其实很少去写Makefile,但是最近帮朋友处理了一个Makefile引入第三方库的问题,就 ...

最新文章

  1. 使用NSRunloop等待异步任务完成
  2. WIN 7下绑定网关MAC地址
  3. 2019年最后的一天_2019最后一天的说说 2019最后一条朋友圈再见2019
  4. leetcode_zigzag conversion
  5. Java RMI远程方法调用详解
  6. nginx架构详解(50%)
  7. 验证回文串Python解法
  8. colorWithAlphaComponent
  9. 今晚十点!鄂尔多斯将屏霸湖南卫视《天天向上》,美爆全国~
  10. 论文阅读:A machine learning approach to medical image classification:Detecting age-related macular dege
  11. 蓝牙调试器-划时代无线调试器
  12. 2012百公里毅行——长沙,湘潭,株洲
  13. F28335第十二篇——串口拓展(XR16C854)
  14. 混合云,让你看的清清楚楚明明白白真真切切
  15. Java批量建立文件夹
  16. Kibana文档操作
  17. python爬虫防屏蔽_Python爬虫防封杀方法集合
  18. 安装 opencv-python 出现Command “python setup.py egg_info“ failed with error code 1 in /tmp/pip-build-npa
  19. web电子商城实现及源码
  20. NOIP 2003年普及组 3. 栈

热门文章

  1. java中function实现_Java中的functor实现
  2. JavaFX 中的像素、分辨率与缩放比
  3. 了解systemctl和chkconfig的服务管理工具
  4. AR头显要上天!欧洲太空总署或用HoloLens维修太空站
  5. Xilinx下载方式(具体可以参考配置MCS文件时右下角help调出的doc)
  6. 提高阅读源代码的效率 转
  7. Cool!15个创意的 CSS3 文本效果【下篇】
  8. 又拍网架构-又一个用到python的网站
  9. NAGIOS安装指南
  10. 使用分析函数进行行列转换