- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C--Socket编程指南
介绍
Socket 编程让你沮丧吗?从man pages 中很难得到有用的信息吗?你想跟上时代去编Internet 相关的程
序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等等…
好在我已经将这些事完成了,我将和所有人共享我的知识了。如果你了解 C 语言并想穿过网络编程的
沼泽,那么你来对地方了。
读者对象
这个文档是一个指南,而不是参考书。如果你刚开始 socket 编程并想找一本入门书,那么你是我的读
者。但这不是一本完全的 socket 编程书。
平台和编译器
这篇文档中的大多数代码都在 Linux 平台PC 上用 GNU 的 gcc 成功编译过。而且它们在 HPUX 平
台 上用 gcc 也成功编译过。但是注意,并不是每个代码片段都独立测试过。
目录:
1) 什么是套接字?
2) Internet 套接字的两种类型
3) 网络理论
4) 结构体
5) 本机转换
6) IP 地址和如何处理它们
7) socket() 函数
8) bind()函数
9) connect()函数
10) listen()函数
11) accept()函数
12) send()和recv() 函数
13) sendto()和recvfrom() 函数
14) close()和shutdown()函数
15) getpeername()函数
16) gethostname()函数
17) 域名服务(DNS )
18) 客户-服务器背景知识
19) 简单的服务器
20) 简单的客户端
21) 数据报套接字Socket
22) 阻塞
23) select()--多路同步I/O
24) 参考资料
什么是 socket ?
你经常听到人们谈论着 “socket”,或许你还不知道它的确切含义。现在让我告诉你:它是使用 标准Unix
文件描述符 (file descriptor) 和其它程序通讯的方式。什么?你也许听到一些Unix 高手(hacker)这样说过:
“呀,Unix 中的一切就是文件!”那个家伙也许正在说到一个事实:Unix 程序在执行任何形式的 I/O 的时
候,程序是在读或者写一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数。但是(注意
后面的话) ,这个文件可能是一个网络连接,FIFO,管道,终端,磁盘上的文件或者什么其它的东西。Unix
中所有的东西就是文件!所以,你想和Internet 上别的程序通讯的时候,你将要使用到文件描述符。你必须
理解刚才的话。现在你脑海中或许冒出这样的念头:“那么我从哪里得到网络通讯的文件描述符呢?”,这
个问题无论如何我都要回答:你利用系统调用 socket(),它返回套接字描述符 (socket descriptor) ,然后你
再通过它来进行send() 和 recv()调用。“但是...”,你可能有很大的疑惑,“如果它是个文件描述符,那么为
什 么不用一般调用read()和write()来进行套接字通讯?”简单的答案是:“你可以使用!”。详细的答案是:
“你可以,但是使用send()和recv()让你更好的控制数据传输。”存在这样一个情况:在我们的世界上,有很
多种套接字。有DARPA Internet 地址 (Internet 套接字) ,本地节点的路径名 (Unix 套接字),CCITT X.25
地址 (你可以将X.25 套接字完全忽略) 。也许在你的Unix 机器上还有其它的。我们在这里只讲第一种:
Internet 套接字。
Internet 套接字的两种类型
什么意思?有两种类型的Internet 套接字?是的。不,我在撒谎。其实还有很多,但是我可不想吓着你。
我们这里只讲两种。除了这些, 我打算另外介绍的 Raw Sockets 也是非常强大的,很值得查阅。
那么这两种类型是什么呢?一种是Stream Sockets (流格式),另外一种是Datagram Sockets (数据包
格式)。我们以后谈到它们的时候也会用到 SOCK_STREAM 和 SOCK_DGRAM。数据报套接字有时
也叫“无连接套接字”(如果你确实要连接的时候可以用connect() 。) 流式套接字是可靠的双向通讯的数据流。
如果你向套接字按顺序输出“1,2” ,那么它们将按
文档评论(0)