- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 征地拆迁工作总结.pptx VIP
- 二级公立医院绩效考核各指标最新的评分标准.pdf
- 辽宁省沈阳市和平区2023-2024学年五年级下学期期末数学试题.docx VIP
- 2025-2026年部编版五年级语文下册期末试卷及答案【完整】 .pdf VIP
- 艾克幕ICOM-IC-9700_维修说明书手册.pdf
- 湖南省普通高等学校招生体育类专业统一考试评分标准和考试细则(2023年版).pdf VIP
- 医院药品破损处理管理制度.docx VIP
- 钱江贝纳利前后减震加油量列表.xls VIP
- 7.1 血液 课件 2024-2025学年北师版生物七年级下册.pptx VIP
- 曲臂车培训课件.pptx VIP
文档评论(0)