2. What is a socket?
你一直听说"sockets"吧.可能很想知道到底他是指什么?好吧,让我来告诉你吧:它是通过标准unix文件描述器来与其他程序通讯的一种方式.
什么?
好-你应该听说过一些黑客的名言,"jeez,unix里所有的东西都是文件"那个人指的就是,所有的unix程序进行任何形式的I/O操作,都是通过读写文件描述字.一个文件描述字简单来说就是与一个打开的文件相关联的整数.但是(这里是关键),那个文件可能是一个网络连接,一个队列,一个管道,一个终端,一个真正的磁盘上的文件或其他的任何东西.unix 里任何东西都是文件.所以当你想要与互联网里其他的程序通讯,你只可以通过文件描述字,你最好相信它:)
你现在可能在问:“我怎么才能找到网络通讯用的文件描述字呢?”别急,我马上来回答这个问题。你先调用socket() 这个系统例程。它返回socket描述字,这个描述字你等会可以通过send()和recv()(参考man send, man recv)这个函数的调用来进行通讯。
“喂,但是”你接着又会问,“如果它是一个文件描述字,为什么在Neptune这个名字中不能用普通的read()和write()函数来在socket里通讯?”简单的说:“你可以!”也就是说“你可以这样做,但是send() and recv() 会对数据交换带来更多的控制。”
下一步呢?我们来看看各种各样的sockets。有DARQA网络地址(网络socket ;Internet Sockets),本地结点的路径名(Unix Sockets),CCITT X.25地址(X.25Sockets可以不用去考虑),你使用的Unix不同可能还有很多其他的Sockets。这篇文章只针对第一种: Internet Sockets。
你一直听说"sockets"吧.可能很想知道到底他是指什么?好吧,让我来告诉你吧:它是通过标准unix文件描述器来与其他程序通讯的一种方式.
什么?
好-你应该听说过一些黑客的名言,"jeez,unix里所有的东西都是文件"那个人指的就是,所有的unix程序进行任何形式的I/O操作,都是通过读写文件描述字.一个文件描述字简单来说就是与一个打开的文件相关联的整数.但是(这里是关键),那个文件可能是一个网络连接,一个队列,一个管道,一个终端,一个真正的磁盘上的文件或其他的任何东西.unix 里任何东西都是文件.所以当你想要与互联网里其他的程序通讯,你只可以通过文件描述字,你最好相信它:)
你现在可能在问:“我怎么才能找到网络通讯用的文件描述字呢?”别急,我马上来回答这个问题。你先调用socket() 这个系统例程。它返回socket描述字,这个描述字你等会可以通过send()和recv()(参考man send, man recv)这个函数的调用来进行通讯。
“喂,但是”你接着又会问,“如果它是一个文件描述字,为什么在Neptune这个名字中不能用普通的read()和write()函数来在socket里通讯?”简单的说:“你可以!”也就是说“你可以这样做,但是send() and recv() 会对数据交换带来更多的控制。”
下一步呢?我们来看看各种各样的sockets。有DARQA网络地址(网络socket ;Internet Sockets),本地结点的路径名(Unix Sockets),CCITT X.25地址(X.25Sockets可以不用去考虑),你使用的Unix不同可能还有很多其他的Sockets。这篇文章只针对第一种: Internet Sockets。
loop's blog
浙公网安备 33010602011771号