实验9UNIX Socket编程_Password_Removed.pdf
《实验9UNIX Socket编程_Password_Removed.pdf》由会员分享,可在线阅读,更多相关《实验9UNIX Socket编程_Password_Removed.pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验 9:UNIX Socket 编程 1、实验目的、实验目的(1)掌握 UNIX Socket 工作机制和程序设计方法;(2)掌握 UINIX 环境 C/S、C/M/S 结构与工作模式;(3)掌握服务器程序的设计方法;(4)掌握 C/S 结构程序的设计方法;(5)了解与通过相关文件/etc/hosts,/etc/services,/etc/network。2、实现设备、实现设备 一台装有 Windows 操作系统和 Linux 机系统的微机或服务器。3、实验方法与注意事项、实验方法与注意事项 实验室内的实验环境与系统是共用设施,请不要在系统内做对系统或对其他用户不安全的事情。要求每个同学登录
2、后系统后,要在自己的家目录内容以自己(拼音)名字或学号,创建一个子目录(已有者可以不再创建)。以后所有工作都要在自己的目录内进行。建议以后的实验都在同台计算机上做,这样可以保持连续性。用户要按通常实验要认真书写实验报告。4、实验过程、实验过程 示例 1:客户端程序设计#include#include#include#include#include#define rec_length 20 main(int argc,char*argv)struct hostent*hp;struct sockaddr_in sin;struct servent*sp;char buf50;int s,pid;
3、char*service,*dest;if(argc!=1)service=argv1;dest=argv2;else fprintf(stderr,NO service assigned!nUsage:);fprintf(stderr,%s service_name destination!n,argv0);fprintf(stderr,Note:service_name is defined in/etc/servicesn);fprintf(stderr,destination is defined in/etc/hostsn);exit(-1);if(sp=getservbyname(
4、service,tcp)=NULL)fprintf(stderr,Error:getservbyname);exit(-5);if(hp=gethostbyname(dest)=0)fprintf(stderr,Error:gethostbyname);exit(-6);bzero(&sin,sizeof(sin);bcopy(hp-h_addr,&sin.sin_addr,hp-h_length);sin.sin_family=hp-h_addrtype;sin.sin_port=sp-s_port;if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(
5、stderr,Error:socket);exit(-6);if(connect(s,&sin,sizeof(sin)=-1)fprintf(stderr,Error:connect);close(s);exit(-6);/next 2 Line build request message pid=getpid();sprintf(buf,%5.5d%5.5d%5.5d%5.5dn,pid,pid*2,pid*3,pid*4);fprintf(stderr,%s is sending request message:%sn,argv0,buf);if(write(s,buf,rec_lengt
6、h)!=rec_length)/to server fprintf(stderr,Write Socket s ERRORn!);close(s);exit(-1);if(read(s,buf,rec_length)=0)/get replay from server fprintf(stderr,Read Socket s Errorn);close(s);exit(-2);printf(%s get reply:%sn,argv0,buf);close(s);exit(0);示例 2:服务器程序设计。#include#include#include#include#include#defi
7、ne rec_length 20 main(int argc,char*argv)struct sockaddr_in sin;struct servent*sp;int s,ns,pid;char buf50;char*service;if(argc!=1)service=argv1;else fprintf(stderr,NO service assigned!nUsage:n);fprintf(stderr,t%s server_name!n,argv0);fprintf(stderr,Note:server_name is defined in file/etc/servicesn);
8、exit(-1);if(sp=getservbyname(service,tcp)=NULL)fprintf(stderr,Error:getservbyname);exit(-5);if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,Error:socket create);exit(-6);bzero(&sin,sizeof(sin);sin.sin_port=sp-s_port;if(bind(s,&sin,sizeof(sin)=-1)fprintf(stderr,Error:bind);close(s);exit(-6);if(l
9、isten(s,5)=-1)fprintf(stderr,Error:listen);close(s);exit(-6);while(1)fprintf(stderr,nttt Now wait connect.n);if(ns=accept(s,0,0)=-1)/wait a connection*/fprintf(stderr,error:accept);continue;if(pid=fork()=-1)/conneted,and then create child proc fprintf(stderr,server:fork error!);close(s);exit(-1);if(
10、pid!=0)/parent proce,nothing to do,and to the next loop close(ns);wait(0);continue;if(pid=0)/entered child proccedure close(s);printf(Receive a client connect:%sn,argv1);if(read(ns,buf,rec_length)=0)fprintf(stderr,Read nothing from socket:nsn);close(ns);exit(-3);printf(%s get message from ns:%sn,arg
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验9UNIX Socket编程_Password_Removed 实验 UNIX Socket 编程 _Password_Removed
限制150内