没有合适的资源?快使用搜索试试~ 我知道了~
c语言SOCKEt编程指南
5星 · 超过95%的资源 需积分: 10 19 下载量 51 浏览量
2012-12-05
16:31:31
上传
评论
收藏 476KB PDF 举报
温馨提示
试读
63页
这个文档是一个指南,而不是参考书。如果你刚开始socket 编程并想找一本入门书,那么这个文档适合你,但这不是一本完全的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
, 管道, 终端, 磁盘上
的文件或者什么其它的东西。 U nix
中所有的东西就是文件! 所以, 你想和 Internet 上别的程序 通
讯的时候, 你将要使用到文件描述符。 你必须理解刚才的
话。
现在你脑海中或许冒出这样的念头: “ 那么我从哪里得到网
络通讯的文件描述符呢?
”
,这个问题无论如何我都要回答
:
你利用系统调用 socket() ,它返回套接字描述符 (socket
descriptor) ,然后你再通过它来进行 send() 和 recv()
调用。
“ 但是 ...
”
,你可能有很大的疑惑,
“ 如果它是个文件描述符
,
那么为什 么不用一般调用 read() 和 wr ite() 来进行套接字通
讯? ”
简单的答案是:
“
你可以使用!
”
。详细的答案是:
“ 你
可以,但是使用 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 浏览器使用的 HTTP 协议也使
用它们来下载页面。 实际上, 当你通过端口 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 Datagra m
Protocol)
”
,也叫 “ UDP ” ( 请参考 RFC-768 。 )
为什么它们是无连接的呢?主要是因为它并不象流式套
接字那样维持一个连接。你只要建立一个包,构造一个有 目
标信息的 IP 头,然后发出去。无需连接。它们通常使用于 传
输包 - 包信息。简单的应用程序有: tftp, bootp 等等。
你也许会想: “ 假如数据丢失了这些程序如何正常工
作?
”
我的朋友, 每个程序在 UDP 上有自己的协议。 例
如,
tftp 协议每发出的一个被接受到包,收到者必须发回一个 包
剩余62页未读,继续阅读
资源评论
- yunsicai2013-09-24挺好的,将socket编程讲解的
- kema2014-05-07不错的资料,呵呵,谢了!
- [转角撞上墙]2012-12-17说实话文档的确不错,讲解很生动详细,但是分数略高
- dlutcz2013-01-08不错的讲解,有帮助
qqstl
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功