- 1、本文档共100页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络编程实用教程第二版教程文件.ppt
memset( (char*) servaddr, 0, sizeof(servaddr) ); /* 清空sockaddr结构 */ servaddr.sin_family = AF_INET; /* 设置为因特网协议族 */ servaddr.sin_addr.s_addr = INADDR_ANY; /* 设置本地IP地址 */ ? /* 检查命令行参数,如果指定了,就是用该端口号,否则使用缺省端口号 */ if (argc 1){ port = atoi(argv[1]); /* 如果指定了端口号,就将它转换成整数 */ } else { port = PROTOPORT; /* 否则,使用缺省端口号 */ } if (port 0) /* 测试端口号是否合法 */ servaddr.sin_port=htons( (u_short)port ); else{ /* 打印错误信息并退出 */ fprintf( stderr, ”bad port number %s\n”, argv[1] ); exit(1); } ? /* 创建一个用于监听的流式套接字 */ listenfd = SOCKET(AF_INET,SOCK_STREAM,0); if (listenfd 0) { fprintf( stderr, “socket creation failed\n” ); exit(1); } /* 将本地地址绑定到监听套接字*/ if ( bind( listenfd, (struct sockaddr *) servaddr, sizeof(servaddr)) 0) { fprintf(stderr, ”bind failed\n” ); exit(1); } ? /* 开始监听,并指定监听套接字请求队列的长度 */ if (listen(listenfd, QLEN) 0) { fprintf(stderr, ”listen filed\n” ); exit(1); } /* 服务器主循环—接受和处理来自客户端的连接请求 */ while(1) { alen = sizeof(clientaddr); /* 接受客户端连接请求,并生成响应套接字 */ if((clientfd = accept( listenfd, (struct sockaddr *) clientaddr, alen)) 0 ) { fprintf( stderr, “accept failed\n”); exit(1); } visits++; /* 累加访问的客户数 */ sprintf( buf, “this server has been contacted %d time \n”, visits ); send(clientfd, buf, strlen(buf), 0 ); /* 向客户端发送信息 */ closesocket( clientfd ); /* 关闭响应套接字 */ } } 关于阻塞的问题 图2.7 服务器进程因调用ACCEPT()而被阻塞 2.3.4 进程的阻塞问题和对策 1.什么是阻塞 阻塞是指一个进程执行了一个函数或者系统调用,该函数由于某种原因不能立即完成,因而不能返回调用它的进程,导致进程受控于这个函数而处于等待的状态,进程的这种状态称为阻塞。 图2.8 RECV()函数的两种执行方式 2.能引起阻塞的套接字调用 在Berkeley套接字网络编程接口的模型中,套接字的默认行为是阻塞的,具体地说,在一定情况下,有多个操作套接字的系统调用会引起进程阻塞。 (1)ACCEPT() (2)READ()、RECV()和READFORM() (3)WRITE()、SEND()和SENDTO() (4)CONNECT() (5)SELECT() (6)CLOSESOCKET() 网络应用程序要在不同的计算机中运行,本机字节顺序是不同的,但是,网络字节顺序是一定的。 所以,应用程序在编程的时候,在把IP地址和端口号装入套接字的时候,应当把它们从本机字节顺序转换为网络字节顺序;相反,在本机输出时,应将它们从网络字节顺序转换为本机字节顺序。 套接字编程接口特为解决这个问题设置了四个函数: htons() 短整数本机顺序转换为网络顺序,用于端口号。 htonl() 长
您可能关注的文档
- 综合日语第22课 第二单元教材课程.ppt
- 综合日语第22课第一单元培训资料.ppt
- 综合日语第23课 第三单元教材课程.ppt
- 综合日语第23课 第二单元教材课程.ppt
- 综合日语第23课第一单元知识讲稿.ppt
- 综合日语第24课第三单元知识讲稿.ppt
- 综合日语第24课第二单元讲解材料.ppt
- 综合日语第25课 第一单元知识介绍.ppt
- 综合日语第25课 第三单元讲解材料.ppt
- 综合日语第25课 第二单元知识介绍.ppt
- 细胞自噬与疾病的研究进展 .pdf
- 2024-2025年高二物理人教版必修一同步课件与练习第1.2课 动量定理 (解析版).docx
- 2024-2025年高二物理人教版必修一同步课件与练习第1.5课 弹性碰撞和非弹性碰撞 (解析版).docx
- 2024-2025年高二物理人教版选择性必修一同步备课习题第四章 电磁振荡与电磁波 (综合复习与测试)(解析版).docx
- 2024-2025年高二物理同步备课讲义选修版期末测试卷(B卷)(备作业)(解析版).docx
- 2024-2025年高二物理同步备课讲义选修版期末测试卷(A卷)(备作业)(解析版)).docx
- 2024-2025年高二物理人教版必修一同步备课习题1.5 弹性碰撞和非弹性碰撞 (原卷版).docx
- 2024-2025年高二物理人教版必修一同步课件与练习第1.5课 弹性碰撞和非弹性碰撞 (原卷版).docx
- 2024-2025年高二物理人教版必修一同步课件与练习第1.6课 反冲现象 火箭 (解析版).docx
- 幼儿园教育指导纲要健康心得【9篇】 .pdf
文档评论(0)