SOCKET网络编程细节问题3
摘要:SOCKET网络编程快速上手(二)——细节问题(3)3.SIGPIPE问题 人怕牺牲,我们写的程序也一样,人有死不瞑目,程序又何尝不是?程序跑着跑着,突然就崩掉了。好一点的牺牲前告诉你些打印,差点的也能用core文件等一些手段查出死在哪了,最惨不忍睹的就是程序没了,core也没了,这真是死得莫名其妙。我们在写socket程序时,也会有这种困扰。 下面我又要开始极尽构造之能事了,客户端代码如下:client#include #include #include #include #include #include #include #include #define PORT 123...
阅读全文
SOCKET网络编程细节问题(2)
摘要:SOCKET网络编程快速上手(二)——细节问题(2)2.TCP数据包接收问题 对初学者来说,很多都会认为:客户端与服务器最终的打印数据接收或者发送条数都该是一致的,1000条发送打印,1000条接收打印,长度都为1000。但是,事实上并不是这样,发送打印基本不会有什么问题(只是一般情况,如果发生调度或者其他情况,有可能导致差别,因此也要注意封装),接收打印却不是固定的,下面是测试代码:测试客户端程序:#include #include #include #include #include #include #include #include #define PORT 1234#...
阅读全文
协议的分用以及wireshark对协议的识别
摘要:协议的分用以及wireshark对协议的识别 在TCP/IP详解一书中谈到了协议的分用,书中的图1-8如上。图1-8可以很好地解释在互联网的分层结构中,底层的协议头是如何承载上层的不同的协议的。对于链路层而言,以太网首部中有不同帧类型用于表示以太网帧内的数据。在IP数据包的首部,也有专门的8位协议类型,用于表示IP包中的上层协议类型,网址http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml中给出了IETF规定的详细的协议类型号,其中TCP是6,UDP是17,ICMP是1。不过在传输层的两个常用协议TCP.
阅读全文
SOCKET网络编程快速上手(一)
摘要:SOCKET网络编程快速上手(一)工作以来,写了很多socket相关的代码。磕磕碰碰,走了很多弯路,也积累了一些东西,今天正好整理一下。为了证明不是从书上抄来的,逻辑会有点乱(借口,呵呵)!知识点的介绍也不会像书上说的那么详细和精准,毕竟个人水平也就这样了。当然,主要还是以上手为主,不过分剖析原理性内容。一些陌生的函数要用到的头文件,使用man查看一下就能解决了。既然该文的名称为“快速上手”,那个人认为下述内容都不存在水分,都是必须要掌握的,一点都不能急躁!一、socket连接流程: 对于程序员来说,开始的时候只会把socket编程当成一个工具,尽快上手,尽快解决战斗。于是乎最关心的就是soc
阅读全文
在网络通讯中应用Protobuf
摘要:在网络通讯中应用ProtobufProtobuf的设计非常适用于在网络通讯中的数据载体,它序列化出来的数据量少再加上以K-V的方式来存储数据,对消息的版本兼容性非常强;还有一个比较大的优点就是有着很多的语言平台支持。下面讲解一下如何在TCP通讯应用中集成Protobuf. Protobuf提供一种简单的对象消息方式来描述数据的存储,通过相关实现可以简单地实现数据流和对象之间的转换。但由于Protobuf序列化后的信息并不包括一些相应对象类型描述,只有消息体的内容;因此在进行通信交互过程中默认情况是不知道这些数据和对象的对应关系;既然对方不清楚这些数据对应那种类型,那数据还源成对象就根本没办法.
阅读全文
TCP通讯处理粘包详解
摘要:TCP通讯处理粘包详解一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。在应用中处理粘包的基础方法主要有两种分别是以4节字描述消息大小或以结束符,实际上也有两者相结合的如HTTP,redis的通讯协议等。在平时交流过程发现一些朋友即使做了这些协议的处理,但有时在处理数据的时候也会出现数据不对的情况。这
阅读全文
简单实现android和wp聊天
摘要:使用Beetle.NetPackage简单实现android和wp聊天Beetle.NetPackage是一个多台平开源Client TCP通讯组件,它针对不同平台提供统一的消息描述规则和使用规范可以简单实现多平台下TCP通讯交互.下而介绍通过Beetle.NetPackage简单实地现android和wp聊天.在了解下面的内容之前可以先到Beetle.NetPackage的开源项目了解一下:https://beetlenp.codeplex.com/ 作为一个网络通讯程序首要是制定一个协议明确有那些消息交互,在Beetle.NetPackage中所有协议描述都必须通过对象来描述,并实现一个.
阅读全文
C#开源实现MJPEG流传输
摘要:C#开源实现MJPEG流传输许久以前写了篇文章《基于.NET打造IP智能网络视频监控系统》,记录和介绍了自己几年来积累和演练的一个系统。发现几个月过去了,没有任何进展。目前已经实现了 UDP+RTP 方式在不同物理机之间的媒体流传输。当然,由于没有基于 .NET 的媒体流压缩实现,所以直接传输的裸图 Bitmap。不过要求不高,帧率低一些,机器性能强一些,看着也很流畅。能在桌面客户端上看到视频图像的功能已经完成了。下面需要考虑,如何通过浏览器来查看视频。在不考虑使用 Flash、ActiveX 的条件下,貌似只能选择 MJPEG 方式。目前还没有研究在 HTML5 下视频是如何处理的,以后有时
阅读全文
多平台Client TCP通讯组件
摘要:Beetle.NetPackage是一个多平台Client Socket TCP通讯组件(Apache License 2.0),组件制统一的对象协议制定规则,可以灵活方便地通过对象来描述TCP通讯交互。现有支持平台有Flash,.NET和Android。组件为了统一编写规范制定了不同语言平台下访问TCP服务的统一处理规则;分别有协议描述规范和消息处理控制。不同语言平台下都提供了一致的对象和接口主要包括:IMessage,Packge,INetClientHandler和NetClient等。IMessage消息描述接口,所有通讯消息必须实现相关规则。flashpublic class Reg
阅读全文
等待与通知机制
摘要:等待与通知机制在之前我们关于停止Thread的讨论中,曾经使用过设定标记done的做法,一旦done设置为true,线程就会结束,一旦为false,线程就会永远运行下去。这样做法会消耗掉许多CPU循环,是一种对内存不友好的行为。 java中的对象不仅拥有锁,而且它们本身就可以通过调用相关方法使自己成为等待者和通知者。 Object对象本身有两个方法:wait()和notify()。wait()会等待条件的发生,而notify()会通知正在等待的线程此条件已经发生,它们都必须从synchronized方法或块中调用。 这种等待-通知机制的目的究竟是为何? 等待-通知机制是一种同步机制,但它更像是
阅读全文
网络IO之阻塞、非阻塞、同步、异步总结
摘要:网络IO之阻塞、非阻塞、同步、异步总结1、前言 在网络编程中,阻塞、非阻塞、同步、异步经常被提到。unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解。网上有详细的分析:http://blog.csdn.net/historyasamirror/article/details/5778378。我结合网上博客和书总结一下,加以区别,加深理解。2、数据流向 网络IO操作实际过程涉及到内核和调用这个IO操作的进程。以read为例,read的具体操作分为以下两个部分: (1)内核等待数据可读 (2)将内核读到的数据拷...
阅读全文
TCP的流量控制和拥塞控制
摘要:TCP的流量控制和拥塞控制TCP的流量控制1.概述 所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接受。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。 如图所示,说明了利用可变窗口大小进行流量控制。设主机A向主机B发送数据。双方确定的窗口值是400.再设每一个报文段为100字节长,序号的初始值为seq=1,图中的箭头上面大写ACK,表示首部中的却认为为ACK,小写ack表示确认字段的值。 接收方的主机B进行了三次流量控制。第一次把窗口设置为rwind=300,第二次减...
阅读全文
TCP可靠传输的实现
摘要:TCP可靠传输的实现1.概述 为方便描述可靠传输原理,假定数据传输只在一个方向上进行,即A发送数据,B给出确认2.以字节为单位的滑动窗口 TCP的滑动窗口是以字节为单位的。为了便于说明,字节编号取得很小。先假定A收到B发来的确认报文字段,其中窗口是20字节,而确认号是31字节。(表明B期望接收到的下一个序号是31,序号30之前的数据已经收到了)。如图所示。A的发送窗口: 发送窗口表示:在没有收到B的确认的情况下,可以连续把窗口内的数据发送出去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便超时重传使用。 发送窗口有如下特点: 1)发送窗口里面的序号表示允许发送的序...
阅读全文
TCP连接的建立与终止
摘要:TCP/IP详解学习笔记(13)-- TCP连接的建立与终止1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态。不断检测是否有客户进程发起连续请求,如有,作出响应。设客户进程运行在主机A中,他先向自己的TCP发出主动打开的命令,表明要向某个IP地址的某个端口建立运输连接,过程如下: 1)主机A的TCP向主机B的TCP发出连接请求报文段,其首部中的同步比特SYN应置1,同时选择一个序号x,表明在后面传送数据时的第一个数据字节的序号是x。 2)主机B的TCP收到连接请求报文段后,如同意,则发挥...
阅读全文
TFTP:简单文本传输协议,BOOTP:引导程序协议
摘要:TFTP:简单文本传输协议,BOOTP:引导程序协议1.TFTP: TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,基于UDP实现。提供不复杂、开销不大的文件传输服务。端口号为69。2.TFTP的报文格式,如图所示 图中显示了5种TFTP报文格式(操作码1和2的报文使用相同的格式)。 TFTP报文的头两个字节表示操作码,对于读请求和写请求(WRQ),文件名字段说明客户要读或写的位于服务器上的文件。模式字段是一个ASCII码串netascii或octet netascii...
阅读全文
广播,多播,IGMP:网际组管理协议
摘要:广播,多播,IGMP:网际组管理协议1.概述 IP有三种地址:单播地址, 广播地址,多播地址。 广播和多播仅应用于UDP。 每个以太网帧包含源主机和目的主机的以太网地址。通常每个以太网帧发往单个目的主机,目的地址指明单个接收接口,因而称为单播。 一个主机要向网上的所有其他主机发送帧,就是广播。 一个主机要向网上的多个主机发送帧,就是多播。2.广播受限的广播:受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址。主机可能还不知道它所在的网络的网络掩码,甚至连它的IP都不知道。指向网络的广播:指向网络的广播地址是主机号全为1的地址。A类网络广播地址...
阅读全文
初识运输层
摘要:初识运输层作为TCP和UDP协议的学习前奏,简单的介绍一下运输层的相关内容,方便对TCP,UDP的学习。1.概述 运输层的任务主要是负责主机中两个进程之间的通信。 运输层的基本功能:复用与分用差错控制(完整性控制)可靠传输(按序交付,无丢失,不重复)拥塞控制(收发双方的协调一致)流量控制(全局上的通信流量调节)2.网络层与运输层的区别运输层为应用进程之间提供端到端的逻辑通信。 网络层为主机之间提供端到端的逻辑通信运输层对收到的报文进行差错检测,包括首部和数据部分。 网络层IP数据报首部中的检验和字段,只检验首部是否出现差错而不检验数据部分。运输层有两种不同的运输协议,即面向链接...
阅读全文
IP选路
摘要:IP选路1.概述 路由算法是用于获取路由表中的路由项目。它是路由选择协议的核心。2.路由算法的分类 从路由算法能否随网络的通信量或拓扑自适应的进行调整变化来分,可以分为两类。静态路由选择策略静态路由选择也叫非自适应路由选择,其特点是简单和开销较小,但不能适应网络变化动态路由选择策略动态路由选择也叫自适应路由选择,特点是能适应网络变化,实现起来复杂,开销也比较大。3.自治系统 因特网将整个互联网划分成许多较小的自治系统,一般简称为AS。自治系统有以下特点:自治系统有权决定自己的路由选择协议所有的网络都属于一个行政单位管辖所有的路由器在本自治系统内都必须是连通的4.路由选择协议的分类内部网关...
阅读全文
ICMP:internet 控制报文协议
摘要:ICMP:internet 控制报文协议1.概述 ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。 ICMP报文是在IP数据报内部被传输的。 ICMP报文的格式如图所示。 类型字段:可以有15个不同的值,来描述特定类型的ICMP报文。代码:进一步描述类型的不同条件检验和:ICMP的检验和是必需的。2.ICMP报文...
阅读全文
ARP 和 RARP
摘要:ARP 和 RARP1.ARP 地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP地址时确地址解析协议定其物理地址的一种协议。 在TCP/IP协议中,A给B发送IP包,在报头中需要填写B的IP为目标地址,但这个IP包在以太网上传输的时候,还需要进行一次以太包的封装,在这个以太包中,目标地址就是B的MAC地址。 计算机A是如何得知B的MAC地址的呢?解决问题的关键就在于ARP协议。 在A不知道B的MAC地址的情况下,A就广播一个ARP请求包,请求包中填有B的IP(192.168.1.2),以太网中的所有计算机都会接收这个请求,而正常的情况下...
阅读全文