socke学习笔记.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文档。上传文档
查看更多
socke学习笔记

首先熟悉数据结构 struct,,,,sockaddr,,,,{ ???,,,,unsigned,,,,short???,,,,sa_family;???,,,,//,,,,address,,,,family,,,,,AF_xxx ???,,,,char?????????????,,,,sa_data[14];?,,,,//,,,,14,,,,bytes,,,,of,,,,protocol,,,,address };,,,, 为了方便使用,建立了同上基本类同大小相同的结构,sa_family=sin_family,,,,,sin_zero[8]是为了补齐,就是为了转换方便: struct,,,,sockaddr_in,,,,{ ???,,,,short,,,,int?????????,,,,sin_family;?,,,,//,,,,Address,,,,family ???,,,,unsigned,,,,short,,,,int,,,,sin_port;???,,,,//,,,,Port,,,,number ???,,,,struct,,,,in_addr????,,,,sin_addr;???,,,,//,,,,Internet,,,,address ???,,,,unsigned,,,,char?????,,,,sin_zero[8];,,,,//,,,,Same,,,,size,,,,as,,,,struct,,,,sockaddr };,,,, struct,,,,in_addr,,,,{ ???,,,,unsigned,,,,long,,,,s_addr;,,,,//,,,,thats,,,,a,,,,32-bit,,,,long,,,,,or,,,,4,,,,bytes };,,,, inet_addr()返回网络字节序,错误时返回-1。所以对于广播地址,55返回也是-1。要注意检查。 int,,,,inet_aton(const,,,,char,,,,*cp,,,,,struct,,,,in_addr,,,,*inp)通过参数返回网络字节序,错误时返回0。但是并不是所有的socket都有实现。 inet_ntoa()返回一个指向静态字符串的指针,所以每一次调用它都会覆盖上一次调用的结果,如果要保存调用strcpy()。它的参数是struct,,,,in_addr而不是long。 常用函数: int,,,,socket(int,,,,domain,,,,,int,,,,type,,,,,int,,,,protocol);创建一个socket并返回(出错返回-1),参数1为PF_INET,参数2为类型SOCK_STREAM,,,,,SOCK_DGRAM,参数3通常为0,根据type自动选择。 int,,,,bind(int,,,,sockfd,,,,,struct,,,,sockaddr,,,,*my_addr,,,,,int,,,,addrlen);把socket和struct,,,,sockaddr结构绑定,也就是和ip和端口绑定。addrlen是sizeof(struct,,,,sockaddr)。出错返回-1。 my_addr.sin_addr.s_addr,,,,=,,,,INADDR_ANY定义为自动获取进程运行所在机器的IP。 对于重启server时出现address,,,,already,,,,in,,,,use的错误,因为先前的socket还处于连接状态,占用原有端口。等待或者主动清除这种情况:通过setsockopt函数 int,,,,yes=1; //char,,,,yes=1;,,,,//,,,,Solaris,,,,people,,,,use,,,,this if,,,,(setsockopt(listener,SOL_SOCKET,SO_REUSEADDR,yes,sizeof(int)),,,,==,,,,-1),,,,{ ???,,,,perror(setsockopt); ???,,,,exit(1); } 其实很多时候不需要调用bind。当你连接远程机器时,调用connect(),会察看socket是否绑定,如果需要会同一个未使用的端口绑定。 int,,,,connect(int,,,,sockfd,,,,,struct,,,,sockaddr,,,,*serv_addr,,,,,int,,,,addrlen);参数2包含远程机器的端口和IP。出错返回-1。 int,,,,listen(int,,,,sockfd,,,,,int,,,,backlog);第二个参数表示incoming队列中允许的连接数。incoming队列中的元素是什么?incoming队列存放在哪里?

文档评论(0)

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

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

1亿VIP精品文档

相关文档