Socket编程知识必学.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Socket编程知识必学.doc

Socket编程知识必学 来源: ChinaUnix博客  日期: 2008.06.29 23:42 (共有条评论) 我要评论 /* * * Author: cnscn * HOME: * 整理自《Linux网络编程》 */ 端口号常识: 端口号被从1 开始分配。 通常端口号超出255 的部分被本地主机保留为私有用途。 1到255 之间的号码被用于远程应用程序所请求的进程和网络服务。 每个网络通信循环地进出主计算机的TCP 应用层。它被两个所连接的号码唯一地识别。这两个号码合起来叫做套接字. 组成套接字的这两个号码就是机器的IP 地址和TCP 软件所使用的端口号。 套接字的三种类型 流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)及原始套接字(RAW)。 流式套接字(SOCK_STREAM) 流式的套接字可以提供可靠的、面向连接的通讯流。 如果你通过流式套接字发送了顺序的数据:“1”、“2”。那么数据到达远程时候的顺序也是“1”、“2”。 Telnet 应用程序、BBS服务、以及系统的远程登陆都是通过Telnet 协议连接的。Telnet 就是一个流式连接。你是否希望你在Telnet 应用程序上输入的字符(或汉字)在到达远程应用程序的时候是以你输入的顺序到达的?答案应该是肯定的吧。 还有WWW 浏览器,它使用的HTTP 协议也是通过流式套接字来获取网页的。事实上,如果你Telnet 到一个Web Site 的80 端口上,然后输入 “GET 网页路径名”然后按两下回车(或者是两下Ctrl+回车)然后你就得到了“网页路径名”所代表的网页! 数据报套接字(SOCK_DGRAM) 数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错。 如果你发送了一个数据报,它可能不会到达。 它可能会以不同的顺序到达。 如果它到达了,它包含的数据中可能存在错误。 数据报套接字也使用IP,但是它不使用TCP,它使用使用者数据报协议UDP(User Datagram Protocol 可以参考RFC 768) 为什么说它们是“无连接”的呢?因为它(UDP)不像流式套接字那样维护一个打开的连接,你只需要把数据打成一个包,把远程的IP 贴上去,然后把这个包发送出去。这个过程是不需要建立连接的。 UDP 的应用例子有: tftp, bootp 等。 那么,数据包既然会丢失,怎样能保证程序能够正常工作呢? 事实上,每个使用UDP的程序都要有自己的对数据进行确认的协议。 比如, TFTP 协议定义了对于每一个发送出去的数据包,远程在接受到之后都要回送一个数据包告诉本地程序:“我已经拿到了!”(一个 “ACK” 包)。如果数据包发的送者在5 秒内没有的得到回应,它就会重新发送这个数据包直到数据包接受者回送了 “ACK” 信号。这些知识对编写一个使用UDP 协议的程序员来说是非常必要的。 无连接服务器一般都是面向事务处理的,一个请求一个应答就完成了客户程序与服务程序之间的相互作用。 面向连接服务器处理的请求往往比较复杂,不是一来一去的请求应答所能解决的,而且往往是并发服务器 套接字工作过程如下: 服务器首先启动 通过调用socket()建立一个套接字, 然后调用bind()将该套接字和本地网络地址联系在一起, 再调用listen()使套接字做好侦听的准备,并规定它的请求队列的长度, 之后就调用accept()来接收连接。 客户在建立套接字 然后就可调用connect()和服务器建立连接。 客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。 最后,待数据传送结束后,双方调用close()关闭套接字。 对流式套接字你所需要做的只是调用send() 函数来发送数据。而对于数据报套接字,你需要自己加个信息头,然后调用sendto() 函数把数据发送出去 原始套接字 原始套接字主要用于一些协议的开发,可以进行比较底层的操作。它功能强大,但是没有上面介绍的两种套接字使用方便,一般的程序也涉及不到原始套接字 套接字结构 struct sockaddr 这个结构用来存储套接字地址。 数据定义: struct sockaddr {

文档评论(0)

xinshengwencai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档