Socket网络编程指导.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据传输(3) * */37 ? sendto()和recvfrom()用于在无连接的数据报socket方 式下进行数据传输。由于本地socket没有与远端机器建立连接,所以在发送数据时要指明目的地址。 ????? sendto()函数原型为: int sendto(int sockfd, const void *buf,int buflen, unsigned int flags, const struct sockaddr_in *to, int tolen); 数据传输(4) * */37 recvfrom()函数原型为: int recvfrom(int sockfd,void *buf,int buflen, unsigned int flags,struct sockaddr_in *from,int *fromlen); recvfrom()函数返回接收到的字节数,当出错时返回-1 ?结束传输 * */37 close()函数用于释放socket,停止在该socket上的任何数据操作:?????close(sockfd); ???? 也可以调用shutdown() 来关闭该socket 该函数允许只停止某个方向上的数据传输,而一个方向上的数据传输继续进行。 ????int shutdown(int sockfd,int how); ???参数 how允许为shutdown操作选择以下几种方式: ????0-------不允许继续接收数据 ????1-------不允许继续发送数据 ????2-------不允许继续发送和接收数据, ????shutdown在操作成功时返回0,出错时返回-1。 C/S结构 * */37 服务器端要先启动,提供相应服务:   1:打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。   2:等待客户请求到达该端口。   3:接收到服务请求,处理该请求并发送应答信号。   4:返回第二步,等待另一客户请求   5:关闭服务器。 客户端:   1、打开一通信通道,并连接到服务器所在主机的特定端口。   2、向服务器发送服务请求报文,等待并接收应答;继续提出请求……   3、请求结束后关闭通信通道并终止。 流程图 * */37 TCP服务器端 (循环服务器) TCP客户端 socket( ) bind( ) listen( ) accept( ) socket( ) send( ) connect( ) recv( ) recv( ) send( ) close( ) close( ) UDP服务器端 UDP客户端 socket( ) bind( ) listen( ) recvfrom( ) sendto( ) socket( ) bind( ) close( ) close( ) 简单的例子 * */37 int sockfd, newsockfd,addr_len, sendnum; struct sockaddr_in my_addr, their_addr; char * msg = “welcome”; sockfd = socket( AF_INET, SOCK_STREAM, 0 ); //建立socket my_addr.sin_family = AF_INET; //选择网络类型为TCP/IP my_addr.sin_addr.s_addr = inet_addr(“22); my_addr.sin_port = htons( 8888 ); //选择端口8888 addr_len = sizeof( struct sockaddr_in); memset(my_addr.sin_zero, ‘\0’, sizeof(my_addr.sin_zero)); bind(sockfd, (struct sockaddr *)my_addr, addr_len); //绑定socket listen(sockfd,10); //监听,等待连接,等待连接队列最大长度为10 简单的例子(续) * */37 While( 1 ) { newsockfd = accept( sockfd, (struct sockaddr *)my_addr, addr_len); sendnum = send(newsockfd, msg, s

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档