网络编程复习.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 (套接字, 英文原意 电源插座) socket的初衷是一个庞大的体系,TCP/IP只是这个庞大体系下一个很小的子集,而我们真正能用上的更是这个子集中的一小部分:运输层(Host-to-Host Transport Layer)的TCP和UDP协议,以及使用这两个协议进行应用层(Application Layer)的开发。 即使是socket的核心部分,网络层(Internet Layer)的IP协议,在编程的时候我们也很少会感觉到它的存在——因为已经被封装好了,我们唯一需要做的事情就是传入一个宏。 数据传输的顺序是: 链路层--网络层--运输层--应用层 建模代码: class TcpServer { private : int listenSock; int communicationSock; sockaddr_in servAddr; sockaddr_in clntAddr; public : TcpServer( int listen_port); bool isAccept(); void handleEcho(); }; sock实际上就是socket,addr就是address。serv和clnt是server和client。还有一个 socket中的结构体sockaddr_in, 表示:socket address internet(网络嵌套字地址)。 2.socket与文件描述符 #includeunistd.h 常用的3个已经打开的fd,0:标准输入(stdin);1:标准输出(stdout);2:标准错误(stderr)。 注意:file和fd并非一定是一一对应的。当一个file被多个程序调用的时候,会生成相互独立的fd。 文件是应用程序与系统(包括特定硬件设备)之间的桥梁,而文件描述符就是应用程序使用这个“桥梁”的接口。在需要的时候,应用程序会向系统申请一个文件,然后将文件的描述符返回供程序使用。返回socket的文件通常被创建在/tmp或者/usr/tmp中。 3.sockaddr和sockaddr_in socket的通用address描述结构sockaddr: struct sockaddr { unsigned short sa_family; char sa_data[ 14 ]; }; 这是一个16字节大小的结构(2+14)(不考虑内存对齐?),sa_family可以认为是socket address family的缩写,也可能被简写成AF(Address Family),当我们指定sa_family=AF_INET (表示该地址属于Internet地址)。 之后,sa_data的形式也就被固定了下来:最前端的2字节用于记录16位的端口,紧接着的4字节用于记录32位的IP地址,最后的8字节清空为零。 我们实际在构造sockaddr时候用到的结构sockaddr_in(意指socket address internet): struct sockaddr_in { unsigned short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[ 8 ]; }; sin_addr被定义成了一个结构,这个结构实际上就是: struct in_addr { unsigned long s_addr; }; 头文件依赖关系: #include winsock2.h int listenSock; int communicationSock; sockaddr_in servAddr; sockaddr_in clntAddr; 现在来写这个类的构造函数: TcpServer::TcpServer( int listen_port) { if ( (listenSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) 0 ) { throw socket() failed ; } memset( servAddr, 0 , sizeof (servAddr)); servAddr.sin_family = AF_INET; servAddr.sin_addr.s_addr = htonl(INADDR_ANY); ser

文档评论(0)

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

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

1亿VIP精品文档

相关文档