网络编程答案Word下载.docx
- 文档编号:18745088
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:11
- 大小:31.04KB
网络编程答案Word下载.docx
《网络编程答案Word下载.docx》由会员分享,可在线阅读,更多相关《网络编程答案Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
三、(8分)当服务器采用并发服务器进行有连接的通信时,采用以下程序段的编程模式来处理应用,请将程序的空白处完善。
intsockfd,newsockfd;
if((sockfd=socket(…)<
0)
Err_sys(“socketerror.”);
if(bind(sockfd,…)<
Err_sys(“error.”);
if(listen(sockfd,5)<
for(;
;
)
{
newsockfd=accept(sockfd,…);
if(newsockfd<
0)
Err_sys(“error.”);
If(fork()==0)
{
close(sockfd);
…
doit(newsockfd);
//用newsockfd处理具体连接请求
exit(0);
}
close(newsockfd);
四、(7分)在一个采用数据流通信的管套sock上进行读操作的程序代码如下,请将程序的空白处完善。
#include<
stdio.h>
tiuser.h>
fcntl.h>
stropts.h>
rc=read(sock,buf,size);
if(rc>
0)
{/*读操作正确并返回数据*/
write(fd,buf,rc);
}elseif(rc==0)
{…
close(fd);
close(sock);
}
else{/*读操作可能错误*/
if(errno==EINTR)
{
/*继续读数据 */
…
else{fprintf(stderr,”readerror:
%d\n”,errno)
exit
(1);
五、完成如下服务器和客户机的编程工作(15分)
基于有连接的通信方式,客户机产生两个随机数,发给两个服务器。
服务器1(IP地址:
192.168.0.1,Port:
3254)将这两个随机数相加;
服务器2(IP地址:
192.168.0.10,Port:
3255),将这两个随机数相减。
两个服务器分别将运算结果返回给客户机,客户机显示回传结果。
客户机:
#include<
string.h>
sys/socket.h>
netinet/in.h>
signal.h>
#defineSERVER_ADDR1"
192.168.0.1"
#defineSERVER_ADDR2"
192.168.0.10"
#defineSERVER_PORT13254
#defineSERVER_PORT23255
//获得nBegin,nEnd之间的所有质数,质数的个数作为返回值,质数放在*ppnData开始的//数组中,若函数出错,则返回负值。
intget_the_Data(intnBegin,intnEnd,int**ppnData)
intsockfd;
structsockaddr_inservaddr;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<
return-1;
bzero(&
servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(SERVER_PORT1);
//8080
if(inet_aton(SERVER_ADDR1,&
servaddr.sin_addr)==0)//"
return–1;
if(connect(sockfd,(structsockaddr*)&
servaddr,sizeof(servaddr))<
intnBuf[3];
nBuf[0]=htonl
(1);
//函数代码
nBuf[1]=htonl(nBegin);
nBuf[2]=htonl(nEnd);
intnbytes=write(sockfd,(char*)nBuf,3*sizeof(int));
if(nbytes<
=0)
{close(sockfd);
int*pnBuf=newint[1024];
nbytes=read(sockfd,(char*)pnBuf,1024*sizeof(int));
=0||nByte%sizeof(int)!
intnNum=nBytes/sizeof(int);
if(nNum==0)
{close(sockfd);
return0;
*ppnData=newint[nNum];
int*pData=*ppnData;
for(inti=0;
i<
nNum;
i++)
*pData=ntohl(*pnBuf);
pData++;
pnBuf++;
close(sockfd);
returnnNum;
intget_the_Avg(intnNum,int*pnData);
servaddr.sin_port=htons(SERVER_PORT2);
//8081
if(inet_aton(SERVER_ADDR2,&
servaddr.sin_addr)==0)//"
192.168.0.2"
int*pnData1=pnData;
*pnData1=htonl
(2);
*pnData1=htonl(*pnData1);
pnData1++;
intnbytes=write(sockfd,(char*)pnData,(nNum+1)*sizeof(int));
intnAvg;
nbytes=read(sockfd,(char*)&
nAvg,sizeof(int));
if(nByte!
=sizeof(int))
nAvg=ntohl(nAvg);
returnnAvg;
voidmain()
intnBegin,nEnd,nAvg;
scanf("
%d\n"
&
nBegin);
nEnd);
int**ppnData=NULL;
intnNum=get_the_Data(nBegin,nEnd,ppnData);
if(nNum<
printf("
Thedatacannotbegotten."
);
exit
(1);
elseif(nNum==0)
Thereisnoanydatabetween%dand%d."
nBegin,nEnd);
nAvg=get_the_Avg(nNum,*ppnData);
if(nAvg<
printf("
Theavgis%d."
nAvg);
if(ppnData!
=NULL)
{deleteppnData;
ppnData=NULL;
服务器1:
#defineSERVER_PORT8080
#defineBACKLOG5
voidserv_respon(intsockfd)
intnbytes;
intbuf_recv[1024];
intbuf_send[1024];
for(;
;
)
nbytes=read(sockfd,(char*)buf_recv,1024*sizeof(int));
if(nbytes<
=0||nbytes%sizeof(int)!
return;
intnNum=nbytes%sizeof(int);
int*pn=buf_recv;
*pn=ntohl(*pn);
pn++;
int**ppnData=NULL;
if(buf_recv[0]==1)//函数代号,get_the_Data
nNum=get_the_Data(buf_recv[1],buf_recv[2],ppnData);
return;
elseif(buf_recv[0]==2)//函数代号,其它
………
……
int*pnData=*ppnData;
buf_send[i+1]=htonl(*pnData);
pnData++;
delete*ppnData;
buf_send[0]=htonl(nNum);
nbytes=write(sockfd,(char*)buf_send,(nNum+1)*sizeof(int));
if(nbytes==0)
elseif(nbytes<
fprintf(stderr,"
Writeerror"
if(nBegin<
=0||nEnd<
nBegin)
intnNum=0;
for(inti=nBegin;
nEnd;
boolb=true;
for(intj=2;
j<
i;
j++)
if(i%j==0)
{b=false;
break;
if(b)
{nNum++;
if(nNum==0)
{b=false;
if(b){nNum++;
*pnData=i;
intmain()
//与例1相同
服务器2:
与服务器1类似。
六、(15分)编程产生子进程、孙进程(即子进程的子进程),并使进程按“孙-子-父”的顺序结束。
Intson_pid;
Intfrandson_pid;
If(son_pid=fork()==0)
{//儿进程
If(grandson_pid=fork()==0)
{//孙进程
exit();
else
wait();
exit();
}
else{//父进程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)