交大继续教育学院操作系统实验4参考答案.docxVIP

  • 4
  • 0
  • 约3.58千字
  • 约 7页
  • 2022-12-27 发布于江苏
  • 举报

交大继续教育学院操作系统实验4参考答案.docx

实验四远程进程 socket 通信参考答案 ( 一 ) 实 验 目 的 系统V的:CPC通信机制只支持同一 台计算机内的进程间通信。BSD UNIX,系统V和 Solaris 等操作系统所提供的 Socked(插座,套接字)是最重要的进程通信工具,可支持广域 网上异种机器之问的通信,包括各类 UNIX 系统和使用最为广泛的个人计算机。通过本实验能使 学牛进一步理解套接字通信的基本原理和机制,通过编制一个实用的异机 socket 通信程序,深 入掌握套接字编程的方法和细节。 ( 二 ) 实 验 题 目 分别编一个客机程序和服务器程序,首先建立客户程序与服务器之间正确的 socket 连结, 然后利用 send 和 recv 函数,客户程序将一个较长的文本文件(如几k字节)中的数据发送给 服务器。要求服务器全部正确地接收到所有的数据(一个也不能少),并将其存入一个文件。 ( 三 ) 源 代 码 服务器端: #include stdio.h #include sys/types.h #include sys/socket.h #include netinet/in-h #include vnetdb.h #i nclude sys/stat.h t nce(infchar**argv) { i nt sockfd,newsockfd,fd,n,1ength; _struct sockaddr in server; _ char buff[1024],rbuf[1024]严path; I/open a socket and make the address sockfd=socket(AF . INET,SOCK STREAM,0);/*生成实接字*/ server.sin fandly=AF INET; _ _ _server.sin addr.s _ _ _ server.sin port=0; /*生成套接字*/ /*选择一个已释放的端口号*/ //bind the socket with address if(bind(sockfd,(struct sockaddr戏)server,sizeof(server))0)return 1; length=sizeof (server); /*获取并打卬端口号*/ //pr int the info rmati on of the socket for die nt if(getsockname(sockfd,(struct sockaddr衣)dserver,1ength)0)printf(getting socket name error\rT); printf(getting socket name:%sln,serversiruaddr.s addr); printf(socket port #%d\rT,ntohs(server.sin port)); I/wai t for connecting listen(sockfd,5); whiled){ newsockfd=accept(sockfd,(struct sockaddr *)0,(int *)0); I/accept a new connect if(!fork()){ /*子进程*/ close(sockfd); bzero(buff,sizeof (buff)); /*调用库函数,清缓冲区*/ ll receive the file from client fd=open(out ·txt*,O WRONLYIO CREAT| O TRUNC,0644); sleep(I); while((count=recv(sockfd,rbuf,1en,0))0){n=write(fd,rbuf,count); } close(fd); exit(0); ] close(newsockfd); 2 return 0; 客户端: #include stdio.h#include sys/types.h #include sys/socket.h#include netinet/in · h#include netdb.h#incl ude fcml.h #include sys/stat.h 客户方程序

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档