[转] setsockopt设置socket

Posted by & filed under Uncategorized.

1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历 TIME_WAIT的过程: BOOL bDontLinger = FALSE; setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL)); 3.在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限: int nNetTimeout=1000;//1秒 //发送时限 setsockopt(socket,SOL_S0CKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int)); //接收时限 setsockopt(socket,SOL_S0CKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int)); 4.在send()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节 (异步);系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据 和接收数据量比较大,可以设置socket缓冲区,而避免了send(),recv()不断的循环收发: // Read more […]

[转]TCP连接状态详解

Posted by & filed under Uncategorized.

tcp状态:   LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTABLISHED:代表一个打开的连接 FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认 FIN-WAIT-2:从远程TCP等待连接中断请求 CLOSE-WAIT:等待从本地用户发来的连接中断请求 CLOSING:等待远程TCP对连接中断的确认 LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认 TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认 CLOSED:没有任何连接状态 转载自:http://www.1398.net/blog/user1/cloudy/archives/2007/682.html Read more […]

[转]SOCKET 端口状态变迁分析

Posted by & filed under Uncategorized.

端口的主要状态有如下几种: CLOSED, LISTENING, SYN_SENT, SYN_RCVD, ESTABLISHED, FIN_WAIT1, FIN_WAIT2, TIME_WAIT, CLOSE_WAIT, LAST_ACK 状态变迁关系如下图: 图1 关于TIME_WAIT的说明: 在TCP连接断开时,主动断开的一方在发送最后一个ACK后,就进入了TIME_WAIT状态,这个状态一般持续2MSL的时间。(MSL是max segment lifetime的缩写,2MSL一般为2分钟)   疑问:Server主动断开连接后,Server端并不会进入TIME_WAIT状态,为何?   关于这个TIME_WAIT存在的理由如下: 1. 因为在第四步的时候,HOST1发送的ACK可能丢失并导致HOST2重新发送FIN消息,TIME_WAIT维护连接状态.如果执行主动关闭的一方HOST1 不进入到TIME_WAIT状态就关闭连接那会发生什么呢?当重传的FIN消息到达 Read more […]

[转]linux文件缓冲区

Posted by & filed under Uncategorized.

  一:缓冲区机制 根据应用程序对文件的访问方式,即是否存在缓冲区,对文件的访问可以分为带缓冲区的操作和非缓冲区的文件操作: 缓冲区文件操作:高级文件系统,将在用户空间中自动为正在使用的文件开辟内存缓冲区。 非缓冲区文件系统:低级文件系统,如果需要,只能由用户在自己的程序中为每个文件设定缓冲区。 如果采用非缓冲的文件访问方式,每次对该文件进行一次读写操作时,都需要使用读写文件系统掉用来处理该操作,因此,如果用户需要访问某个磁盘文件,则每访问一次都要执行一次系统调用,执行一次系统调用将涉及到CPU状态的切换,即从用户空间切换到内核空间,实现上下文的切换,这将损耗一定的CPU时间,频繁的磁盘访问对程序的执行效率造成很大的影响。 ANSI标准C库函数建立在底层系统调用之上,即C函数库文件访问函数的实现中使用了低级文件I/O系统调用,ANSI标准C库中的文件处理函数为了减少使用系统调用的次数,提高效率,根据应用的不同,采用缓冲区机制,这样,在对磁盘文件进行读操作时,可以一次从文件中读出大量的数据到缓冲区中,以后对这部风的访问就不需要在使用系统调用了,即只需要少量的CPU状态切换。在对文件进行写操作时,可以先将内容存在缓冲区,待文件写满后,或者确实需要更新时在调用系统调用将文件一次写入到磁盘中。 二:缓冲区类型 标准I/O Read more […]

UDP穿透NAT

Posted by & filed under Uncategorized.

 对于UDP:一种是Cone NAT,简单说就是NAT每次分配给内网的端口是一样的,即使连接不同的主机,NAT上的端口还是不变(除非过期)。类似这样的NAT或防火墙,已经有比较可靠的解决方法:Peer-to-Peer (P2P) communication across middleboxes 另外一种是Symmetric NAT,对于这种NAT,内网连接不同的其他主机,NAT分配给它的是不同的端口。这种情况下,使用上面的方法就已经无效了。可能的办法就是猜测NAT下次将要分配的端口,也有算法可以比较准确得猜测到端口:Symmetric NAT Traversal using STUN 虽然还是没有办法完全猜对,但也是一种办法。我已经用实现Cone NAT,因为考虑到现在大部分的NAT不是Symmetric的,因此,就不去考虑Symmetric的实现了,也许日后有时间可以考虑。 对于TCP,也有办法:Establishing Read more […]

[转]TCP穿透主流商用NAT产品的主要技术研究

Posted by & filed under Uncategorized.

[摘要]近些年,标准化社区已经开发出一些UDP穿透NAT/防火墙的技术(也就是,在NAT之后的主机之间建立UDP流)。然而,由于TCP连接建立的不对称特点,TCP的NAT穿透要困难的多。最近,研究者们提出了多种TCP穿透NAT的途径,然而,这些方法中,成功的都依赖于NAT对各种TCP(和TCMP)包的序列如何响应的。本文对TCP穿透主流商用NAT产品的主要技术进行了首次深入、广泛的研究。我们开发了一套公开、有效的软件测试套件用来测定NAT对各种独立探测以及完整的TCP连接建立的响应。我们在实验室测试了16个NAT产品,在公网上测试了93个家用NAT产品。根据这些测试结果,如同NAT产品的市场宣传那样,我们评估了家用网络中NAT穿透成功的可能性。本文的另外一个出发点,就是可以给TCP穿透NAT协议的设计和NAT/防火墙行为的标准化工作给与指导,包括IPv6过渡期间IPv4与IPv6之间穿透NAT的鉴定。 1 Read more […]

nat 穿透原理 (TCP)

Posted by & filed under Uncategorized.

一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基本上没有人会告诉你如何使用TCP协议去穿透(甚至有的人会直接告诉你TCP协议是无法实现穿透的)。但是,众所周知的是,UDP是一个无连接的数据报协议,使用它就必须自己维护收发数据包的完整性,这常常会大大增加程序的复杂度,而且一些程序由于某些原因,必须使用TCP协议,这样就常常令一些开发TCP网络程序的人员“谈穿透色变”。那么,使用TCP协议是不是就不能实现穿透呢?答案当然是否定的:TCP协议不仅能实现NAT穿透,而且实现起来比UDP穿透甚至还简单一些。 要了解如何使用TCP穿透NAT,就要首先看看如何使用UDP穿透NAT。 我们假设在两个不同的局域网后面分别有2台客户机A和 Read more […]

nat穿透(一些基本知识)(整理)

Posted by & filed under Uncategorized.

一:基本术语 防火墙 防火墙限制了私网与公网的通信,它主要是将(防火墙)认为未经授权的的包丢弃,防火墙只是检验包的数据,并不修改数据包中的IP地址和TCP/UDP端口信息。 网络地址转换(NAT) 当有数据包通过时,网络地址转换器不仅检查包的信息,还要将包头中的IP地址和端口信息进行修改。以使得处于NAT之后的机器共享几个仅有的公网IP地址(通常是一个)。网络地址转换器主要有两种类型. P2P应用程序 P2P应用程序是指,在已有的一个公共服务器的基础上,并分别利用自己的私有地址或者公有地址(或者两者兼备)来建立一个端到端的会话通信。 P2P防火墙 P2P防火墙是一个提供了防火墙的功能的P2P代理,但是不进行地址转换. P2P-NAT P2P-NAT Read more […]

EasyUI之Form load函数IE8下设置Radio或Checkbox的BUG

Posted by & filed under Uncategorized.

EasyUI的form的load函数很好用,表单赋值就靠它了,简单方便。我们可以指定url以Ajax加载,如:

JSON如下: 也可以指定json,比如:

不过需要注意一点的是,其是根据控件的name属性来匹配的。 最近在使用EasyUI时,发现表单上如果使用radio时,在IE8会加载出错,错误如下: “in”的操作数无效: Read more […]