TCP 和 UDP 在socket编程中的区别

news/2024/5/17 18:00:24 标签: socket, tcp, 编程, udp

一、TCP与UDP的区别

 基于连接与无连接 
  对系统资源的要求(TCP较多,UDP少) 
  UDP程序结构较简单 
  流模式与数据报模式 
  TCP保证数据正确性,UDP可能丢包 
  TCP保证数据顺序,UDP不保证 
  部分满足以下几点要求时,应该采用UDP 面向数据报方式 网络数据大多为短消息 
  拥有大量Client 
  对数据安全性无特殊要求 
  网络负担非常重,但对响应速度要求高 
  具体编程时的区别 socket()的参数不同 
  UDP Server不需要调用listen和accept 
  UDP收发数据用sendto/recvfrom函数 
  TCP:地址信息在connect/accept时确定 
  UDP:在sendto/recvfrom函数中每次均 需指定地址信息 
  UDP:shutdown函数无效

二、man----socket
    通过查看socket的man手册可以看到socket函数的第一个参数的值可以为下面这些值: 
  Name Purpose 
  PF_UNIX, PF_LOCAL Local communication 
  PF_INET IPv4 Internet protocols 
  PF_INET6 IPv6 Internet protocols 
  PF_IPX IPX - Novell protocols 
  PF_NETLINK Kernel user interface device 
  PF_X25 ITU-T X.25 / ISO-8208 protocol 
  PF_AX25 Amateur radio AX.25 protocol 
  PF_ATMPVC Access to raw ATM PVCs 
  PF_APPLETALK Appletalk 
  PF_PACKET Low level packet interface

 

三、编程区别
     通常我们在说到网络编程时默认是指TCP编程,即用前面提到的socket函数创建一个socket用于TCP通讯,函数参数我们通常填为SOCK_STREAM。即socket(PF_INET, SOCK_STREAM, 0),这表示建立一个socket用于流式网络通讯。 
   SOCK_STREAM这种的特点是面向连接的,即每次收发数据之前必须通过connect建立连接,也是双向的,即任何一方都可以收发数据,协议本身提供了一些保障机制保证它是可靠的、有序的,即每个包按照发送的顺序到达接收方。 

  而SOCK_DGRAM这种是User Datagram Protocol协议的网络通讯,它是无连接的,不可靠的,因为通讯双方发送数据后不知道对方是否已经收到数据,是否正常收到数据。任何一方建立一个socket以后就可以用sendto发送数据,也可以用recvfrom接收数据。根本不关心对方是否存在,是否发送了数据。它的特点是通讯速度比较快。大家都知道TCP是要经过三次握手的,而UDP没有。 

  基于上述不同,UDP和TCP编程步骤也有些不同,如下: 
  TCP编程的服务器端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt(); * 可选 
  3、绑定IP地址、端口等信息到socket上,用函数bind(); 
  4、开启监听,用函数listen(); 
  5、接收客户端上来的连接,用函数accept(); 
  6、收发数据,用函数send()和recv(),或者read()和write(); 
  7、关闭网络连接; 
  8、关闭监听; 

  TCP编程的客户端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt();* 可选 
  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 
  4、设置要连接的对方的IP地址和端口等属性; 
  5、连接服务器,用函数connect(); 
  6、收发数据,用函数send()和recv(),或者read()和write(); 
  7、关闭网络连接;


  与之对应的UDP编程步骤要简单许多,分别如下: 
  UDP编程的服务器端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt();* 可选 
  3、绑定IP地址、端口等信息到socket上,用函数bind(); 
  4、循环接收数据,用函数recvfrom(); 
  5、关闭网络连接; 

  UDP编程的客户端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt();* 可选 
  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 
  4、设置对方的IP地址和端口等属性; 
  5、发送数据,用函数sendto(); 
  6、关闭网络连接;


http://www.niftyadmin.cn/n/1150679.html

相关文章

ui 显示逻辑

1 窗口划分: windows窗口 ,Tip窗口 2 单个Windows窗口: a, 保证同一时间之显示一个窗口 b,显示窗口流程 1 获取uicamera , 生成 一张屏幕 Textrue纹理 2 实例化空物体,加上Panel,panel深度为 …

C学习-预处理指令-static和extern关键字-对函数、变量的作用(七)

我们知道,不同类型的变量有不同的存储类型、不同的生命周期、不同的作用域。这讲介绍2个比较重要的关键字:static和extern。static和extern不仅可以用在变量上,还可以用在函数上。一、变量类型 C语言根据变量的存储类型的不同,可以…

Behavior Designer 中文版教程

Behavior Designer 概述 中文版PDF下载地址:http://download.csdn.net/download/mango9126/9840488 Behavior Designer 是一个行为树插件!是为了让设计师,程序员,美术人员方便使用的可视化编辑器!Behavior Designer 提…

十一种通用滤波算法

1、限幅滤波法&#xff08;又称程序判断滤波法&#xff09; A、方法&#xff1a; 根据经验判断&#xff0c;确定两次采样允许的最大偏差值&#xff08;设为A&#xff09; 每次检测到新值时判断&#xff1a; 如果本次值与上次值之差<A,则本次值有效 如果本次值与…

G-buffer投影

操作原理和步骤&#xff1a; 1 转到裁剪空间坐标系 2 计算顶点在相机远裁剪面的位置&#xff08;通过等比三角形&#xff09; 3 计算要显示贴画的顶顶点 4 转到局部坐标系 5 -0.5scale < x<0.5*scale -0.5scale < y<0.5*scale 6 计算 uv 坐标 x 0.5*scale y 0…

java基础(十二章)

java基础&#xff08;十二章&#xff09; 一、变量的作用域&#xff08;有效的使用范围&#xff09; 1、变量有2种 1.1成员变量&#xff08;属性&#xff09; 声明在类的里面&#xff0c;方法的外面 1.2 局部变量 声明在方法里面或for循环结构中 2、调用时的注意事项&#xff0…

A*算法,Grid生成(研究分析步骤)

1 划分格子 2 可行走行判定 3 腐蚀边界 4 计算连接性 5 区域划分&#xff08;洪水填充(Flood fill)算法&#xff09;

【Unity技巧】四元数(Quaternion)和旋转

四元数介绍 旋转&#xff0c;应该是三种坐标变换——缩放、旋转和平移&#xff0c;中最复杂的一种了。大家应该都听过&#xff0c;有一种旋转的表示方法叫四元数。按照我们的习惯&#xff0c;我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转。矩阵旋转使用了一个…