linux_unix网络编程指南(socket 编程)

linux_unix网络编程指南(socket 编程)

ID:33159007

大小:72.84 KB

页数:16页

时间:2019-02-21

linux_unix网络编程指南(socket 编程)_第1页
linux_unix网络编程指南(socket 编程)_第2页
linux_unix网络编程指南(socket 编程)_第3页
linux_unix网络编程指南(socket 编程)_第4页
linux_unix网络编程指南(socket 编程)_第5页
资源描述:

《linux_unix网络编程指南(socket 编程)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Linux/Unix网络编程指南(Socket编程)什么是socket?你始终听到人们谈论着"socket",而你不知道他的确切含义。那么,现在我告诉你:他是使用Unix文件描述符(filedescriptor)和其他程序通讯的方式。什么?Ok--你也许听到一些Unix高手(hacker)这样说:“Unix中所有的东西就是文件!”那个家伙也许正在说到一个事实:Unix程序在执行任何形式的I/O的时候,程序是在读或者写一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数。但是(注意后面的话),这个文件可能是一个网络连接,FIFO,管

2、道,终端,磁盘上的文件或者什么其他的东西。Unix中所有的东西是文件!因此,你想和Internet上别的程序通讯的时候,你将要通过文件描述符。最好相信刚才的话。现在你脑海中或许冒出这样的念头:“那么我从哪里得到网络通讯的文件描述符呢,聪明人?”无论如何,我要回答这个问题:你利用系统调用socket()。他返回套接口描述符(socketdescriptor),然后你再通过他来调用send()和recv()。“但是...”,你可能现在叫起来,“如果他是个文件描述符,那么为什么不用一般的调用read()和write()来通过套接口通讯?”简单的答

3、案是:“你可以使用一般的函数!”。详细的答案是:“你可以,但是使用send()和recv()让你更好的控制数据传输。”有这样一个事实:在我们的世界上,有很多种套接口。有DARPAInternet地址(Internet套接口),本地节点的路径名(Unix套接口),CCITTX.25地址(你可以完全忽略X.25套接口)。也许在你的Unix机器上还有其他的。我们在这里只讲第一种:Internet套接口。-------------------------------------------------------------------------

4、-------Internet套接口的两种类型什么意思?有两种Internet套接口?是的。不,我在撒谎。其实还有很多,但是我可不想吓着你。我们这里只讲两种。Exceptforthissentence,whereI'mgoingtotellyouthat"RawSockets"arealsoverypowerfulandyoushouldlookthemup.那两种类型是什么呢?一种是"StreamSockets",另外一种是"DatagramSockets"。我们以后谈到他们的时候也会用到"SOCK_STREAM"和"SOCK_DGRAM

5、"。数据报套接口有时也叫“无连接套接口”,如果你确实要连接的时候用connect()。流式套接口是可靠的双向通讯的数据流。如果你向套接口按照顺序输出“1,2”,那么他们将按照顺序“1,2”到达另一边。他们也是无错误的传递的,有自己的错误控制。有谁在使用流式套接口?你可能听说过telnet,不是吗?他就使用流式套接口。你需要你所输入的字符按顺序到达,不是吗?同样,WWW浏览器使用的HTTP协议也使用他们。实际上,当你通过端口80端口telnet到一个WWW站点,然后输入“GETpagename”的时候,你也可以得到HTML的内容。为什么流式套

6、接口可以达到高质量的数据传输?他使用了“传输控制协议(TheTransmissionControlProtocol)”,也叫“TCP”(请参考RFC-793获得详细资料。)TCP控制你的数据按顺序到达并且没有错误。你也许听到“TCP”是因为听到过“TCP/IP”。这里的IP是指“Internet协议”(请参考RFC-791.)IP只是处理Internet路由而已。那么数据报套接口呢?为什么他叫无连接呢?为什么他是不可靠的呢?恩,有这样的事实:如果你发送一个数据报,他可能到达,他可能次序颠倒了。如果他到达,那么在这个包的内部是无错误的。数据报

7、也使用IP作路由,但是他不选择TCP。他使用“用户数据报协议(UserDatagramProtocol)”,也叫“UDP”(请参考RFC-768.)为什么他们是无连接的呢?主要原因是因为他并不象流式套接口那样维持一个连接。你只要建立一个包,在目标信息中构造一个IP头,然后发出去。不需要连接。应用程序有:tftp,bootp等等。“够了!”你也许会想,“如果数据丢失了这些程序如何正常工作?”我的朋友,每个程序在UDP上有自己的协议。例如,tftp协议每发出一个包,收到者发回一个包来说“我收到了!”(一个“命令正确应答”也叫“ACK”包)。如果

8、在一定时间内(例如5秒),发送方没有收到应答,他将重新发送,直到得到ACK。这一点在实现SOCK_DGRAM应用程序的时候非常重要。-----------------------

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。