没有合适的资源?快使用搜索试试~ 我知道了~
C语言SOCKET编程超级完整.doc
0 下载量 86 浏览量
2023-07-05
13:06:42
上传
评论
收藏 103KB DOC 举报
温馨提示
试读
60页
C语言SOCKET编程超级完整.doc
资源推荐
资源详情
资源评论
.
实用文档.
介绍
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〞,那么它们将按顺序“1,2〞
到达另一边。它们是无错误的传递的,有自己的错误控制,在此
不讨论。
有什么在使用流式套接字?你可能听说过 telnet,不是吗?
它就使用流式套接字。你需要你所输入的字符按顺序到达,不是
吗?同样,WWW浏览器使用的 协议也使用它们来下载页
面。实际上,当你通过端口80 telnet 到一个 WWW 站点,然后
输入 “GET pagename〞 的时候,你也可以得到 HTML 的内容。
为什么流式套接字可以到达高质量的数据传输?这是因为它使
用了“传输控制协议 (The Transmission Control Protocol)〞,也叫
.
实用文档.
“TCP〞 (请参考 RFC-793 获得详细资料。)TCP 控制你的数据
按顺序到达并且没有错
误。你也许听到 “TCP〞 是因为听到过 “TCP/IP〞。这里的 IP
是指“Internet 协议〞(请参考 RFC-791。) IP 只是处理 Internet
路由而已。
那么数据报套接字呢?为什么它叫无连接呢?为什么它是不
可靠的呢?有这样的一些事实:如果你发送一个数据报,它可能
会到达,它可能次序颠倒了。如果它到达,那么在这个包的内部
是无错误的。数据报也使用 IP 作路由,但是它不使用 TCP。
它使用“用户数据报协议 (User Datagram Protocol)〞,也叫 “UDP
〞 (请参考 RFC-768。)
为什么它们是无连接的呢?主要是因为它并不象流式套接字
那样维持一个连接。你只要建立一个包,构造一个有目标信息的
IP 头,然后发出去。无需连接。它们通常使用于传输包-包信息。
简单的应用程序有:tftp, bootp等等。
你也许会想:“假设数据丧失了这些程序如何正常工作?〞我
的朋友,每个程序在 UDP 上有自己的协议。例如,tftp 协议每
发出的一个被接受到包,收到者必须发回一个包来说“我收到了!
〞 (一个“命令正确应答〞也叫“ACK〞 包)。如果在一定时间内(例
如5秒),发送方没有收到应答,它将重新发送,直到得到 ACK。
这一ACK过程在实现 SOCK_DGRAM 应用程序的时候非常重要。
--------------------------------------------------------------------------------
剩余59页未读,继续阅读
资源评论
zzzzl333
- 粉丝: 674
- 资源: 7万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功