SOCK_STREAM和SOCK_DGRAM两种类型的区别

sock_stream 是有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料(如文件)传送。

sock_dgram 是无保障的面向消息的socket , 主要用于在网络上发广播信息。

SOCK_STREAM是基于TCP的,数据传输比较有保障。SOCK_DGRAM是基于UDP的,专门用于局域网,基于广播SOCK_STREAM
是数据流,一般是tcp/ip协议的编程,SOCK_DGRAM分是数据抱,是udp协议网络编程

解释一下:关于UDP

1、UDP协议适用端口分辨运行在同一台设备上的多个应用程序,UDP有不提供数据报分组、组装和不能对数据包进行排序的缺点。也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

2、在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。

3、但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

关于TCP

1、TCP提供端到端、全双工通信;采用字节流方式,如果字节流太长,将其分段;提供紧急数据传送功能。

2、TCP特性:

(1)面向连接的传输; 

(2)端到端的通信; 

(3)高可靠性,确保传输数据的正确性,不出现丢失或乱序; 

(4)全双工方式传输; 

(5)采用字节流方式,即以字节为单位传输字节序列; 

(6)紧急数据传送功能。所以如果你需要传输的数据是准确的,建议采用TCP,也就是sock_stream 如果你传输的是视频音频等数据,丢几个包也无所谓的,可以采用UDP,也就是sock_dgram

时间: 2024-09-10 04:41:53

SOCK_STREAM和SOCK_DGRAM两种类型的区别的相关文章

网页设计中的tab应用的两种类型

当今,网页设计中的tab应用十分普遍,不过一般都脱离不了一下两种类型: 第1种 鼠标单击切换.此种情形下tab是没有链接的(但是在选中的tab区域内增加 更多或者more链接). 第2种 鼠标悬浮切换.此种情况下很多tab都加了链接,所以 a:hover 应该生效,也就是鼠标停靠时有下滑下或颜色等提示.其实这也是Norman设计理念里,对于用户恰当Feedback(反馈)的实践.在实际案例中,我们看到了一些好的设计,也有些我不赞成的设计,这里稍做分享. 案例一:yahoo美国首页,属于第1种ta

位图-下面两种写法的区别,为什么第一种会报错?

问题描述 下面两种写法的区别,为什么第一种会报错? 第一种 BitmapFactory.decodeStream(conn.getInputStream()); 第二种 InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); 解决方案 没有看出有什么不同,InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decode

网上找到MD5的两种实现方式区别没弄明白

问题描述 byte[]result=Encoding.Default.GetBytes("123abc456");MD5md5=newMD5CryptoServiceProvider();byte[]output=md5.ComputeHash(result);Console.WriteLine(BitConverter.ToString(output).Replace("-",""));//为什么要Replace("-",&

debug模式-启动调试的时候F5 解决方案配置 也就是 Debug和Release 两种模式的区别?

问题描述 启动调试的时候F5 解决方案配置 也就是 Debug和Release 两种模式的区别? 怎么解释? 求高手告知 感激不尽! 解决方案 看不到图啊 这两种模式也就是编译选项不同.自己开发工程中用DEBUG模式,而产品发布是RELEASE版本. 另外有时DEBUG模式程序没有错,而release有错,有时会相反

JS两种类型的表单提交方法实例分析_javascript技巧

本文实例分析了JS两种类型的表单提交方法.分享给大家供大家参考,具体如下: 1.原始的 <form method="post" action="/student/stureg/add" id="form1" onsubmit="return subForm();"> <button type="submit" class="button red" style="

string-java中String类两种初始化的区别

问题描述 java中String类两种初始化的区别 解决方案 首先,你得理解下JAVA的存储区主要有三个:栈.堆.静态区.这三个的生命周期不一样,分配方式也不一样,存储内容也不一样 String a="aaa"这里的aaa存放就是在静态区,如果还有后头又定义一个string b="aaa",那么java里头会把它也指向a指向的地方.整个aaa会一直等到你程序退出了才释放空间 而String a1=new String("aaa").这里aaa是放

JS类定义原型方法的两种实现的区别评论很多_js面向对象

我们知道,给JavaScript类添加原形(prototype)方法是很简单的.而且常用的有下面这两种方法,可是这两种方法在使用时有区别吗?     JScript Class:  复制代码 代码如下:  function JSClass()   {        }      Extends prototype method:  复制代码 代码如下:  JSClass.prototype.MethodA = function()   {   };      Or   复制代码 代码如下: fu

PHP中数组合并的两种方法及区别介绍_php技巧

PHP数组合并两种方法及区别 如果是关联数组,如下: 复制代码 代码如下: $a = array( 'where' => 'uid=1', 'order' => 'uid', ); $b = array( 'where' => 'uid=2', 'order' => 'uid desc', ); 1. array_merge,如果两个数组存在相同的key,后面的一个会覆盖前面的 复制代码 代码如下: <?php $c = array_merge($a, $b); var_ex

两种类型的Ajax开发

一种类型是完全没有架构设计的Ajax开发,靠堆积代码完成复杂的功能.这样的开发者人数众多,往往来自ASP.PHP等开发者阵营,没有受到过严格的软件设计和软件开发的训练.我将其称为"无组织的Ajax开发",或者"增加了XMLHttpRequest对象的DHTML开发",他们所生产的代码质量比51js网站上那些免费下载的DHTML代码强不了多少,难以使用,难以维护. 第二种类型是基于某个成熟的Ajax开发框架和设计模式的Ajax开发,开发的代码在structure/pr