资源描述:
《tcp套接口通信实验》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验二:tcp套接口通信实验一、实验目的学会使用标准的P0S1X套接口标准函数,满足客户端和服务器的通信需求。•建立tcp套接口•接收与发送tcp数据包•解析与处理tcp数据包二、预备知识熟悉tcp套接口函数使用方法三、实验预计时间30分钟左右四、实验步骤:a)根据《unix网络编程》书中的实例或者网上搜得的例子作为参考,编写・c和・h文件。分别编写服务器和客户端两端的代码,其中,由于是在一台机器上开发,因此客户端的代码访问服务器的地址定为127.0.0.1即可。b)看懂例子makefile。c)编译、运
2、行五、实验源代码及结果服务端程序TCPServer.c#inelude#include#include#inelude#inelude〈sys/types・h>#inelude〈netinet/in.h〉#inelude#ineludeh>intmain(intargc,char**argv){intsockfd,new_fd;/*监听socket:sockfd,数据传输socket
3、:new_fd*/structsockaddr_inmy_addr;/*本机地址信息*/structsockaddr_intheir_addr;/*客户地址信息*/unsignedintsin_size,myport,1isnum;if(argv[1])myport=atoi(argv[lj);elsemyport=6000;if(argv[2j)lisnum=atoi(argv[2j);else1isnum=2;if((sockfd=socket(PF1NET,SOCKSTREAM,0))==-1){p
4、error("socket");exit(1);}my_addr.sin_fami1y=PF_INET;myaddr.sinport二htons(myport);my_addr.sin_addr.s_addr=INADDR_ANY;bzero(&(myaddr・sinzero),0);if(bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr))■1){perror(z/bind,z);exit(1);}if(listen(sockfd,l
5、isnum)==-1){perror("listen");exit(1);}while(1){sin_size二sizeof(structsockaddr_in);if((new_fd=accept(sockfd,(structsockaddr*)&their_addr,&sin_size))==-1){porror("accept");continue;}printf("server:gotconnectionfrom%s,z,inetntoa(theiraddr.sinaddr));if(!for
6、k()){/*子进程代码段*/if(send(newfd,"Hello,world!,z,14,0)==-1){perror("send");close(new_fd);exit(0);}}close(newfd);/*父进程不再需要该socket*/waitpid(-l,NULL,WN0HANG);/*等待子进程结束,清除子进程所占用资源*/}}客户端程序TcpClient.c#include#include#inelude#include7、tring・h>#include#include#include#inelude〈sys/socket.h>#defineMAXDATASIZE100/*每次最大数据传输量*/intmain(intargc,char*argv[]){intsockfd,numbytes;charbuf[MAXDATASIZE];structhostent*he;structsockaddrintheiraddr;unsignedintmyport;i
8、f(argv[2j)myport=atoi(argv[2]);elsemyport=6000;if(argc!=3){fprintf(stderr,,zusage:%shostnameport",argv[0]);exit(1);}if((he=gethostbyname(argv[1]))==NULL){horrorC'gethostbyname");exit(1);}if((sockfd=socket(PF_INET,