socket,浅谈socket

浅谈socket
1.什么是socket?
它是一种使用标准Unix文件描述符与其它程序通讯的方式。基于socket接口,我们可以用它来开发TCP/IP网络上的应用程序。socket接口起先是在Unix操作系统里面设计的。呵呵,可能初学者对于接口这个字眼不怎么理解,对于操作系统来说,socket接口可以简单了的理解为一套用于网络通讯的API,而这套API控制网络硬件接口的输入输出。
再来看UNIX操作系统,所有的外围设备包括键盘、鼠标、显示器都被看作是文件系统中的文件,因此,对硬件接口的输入输出可以通过读写文件的方式完成。我们可以通过这些接口来处理外围设备与程序之间的通信。对于UNIX系统,如果你想打开某个文件,系统将返加一个文件描述符(即程序返回一个非负整数),系统可以通过文件描述符来管理文件资源,socket有其专门的文件描述符,也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,建立连接、数据传输,都是通过该socket实现的。
2.socket编程数据的完整性?
socket编程中很重要的一点就是,定义好报头报尾,处理好数据拼接。由于网络的稳定性是不可控制的,有很多因素会影响到网络的稳定,网线松了,网络时断时连等。例如,发送一段数据0101010101000100,一秒发送100次,这个过程中,很有可能,会先只发送010101,再发送0101000100,数据找不到先后顺序,前后拼接数据会变成0101000100 010101,socket并不能保证,每次传输的数据是完全发送成功的,也无法保证 一次发送的数据是完整的,有可能是要发了两次 才将一次数据发送完整。此时,我们就要定义报头与报尾,来确定数据是否发送完成。
如客户端发送一串字符:“abcMaxZCabc”,我们可以在字符串两连加上Chr(2)+"abcMaxZCabc"+Chr(3), Chr(2)与Chr(3)可以查找ASCII表0x02与0x03是两个特殊字符,我们用这两个特殊字符来确定数据的首尾。即便是中途网线断掉,再连上,得到数据"MaxZCabc"+Chr(3)或时断时连,一次只得到"MaxZC",我们就可以在这串数据里面查找是否存在Chr(2)与Chr(3)并确定数据的长度与它们的位置来判断数据是否完整,如果服务端接收完整,我们将反馈信息回去,确认己接收成功,再发下一次数据,如果未完整,这时我们也是可以通过程序来判断拼接下一次的数据,直到完整为止。再次我们要注意一下,如果上一次数据与下一次数据通讯间隔超过我们所设最大值,即可判断网络出了故障,此时就可以检查硬件问题或是网速的问题了。
呵呵,今天就说到这里了。
Tags: 

延伸阅读

最新评论

发表评论