资源描述:
《用socket实现进程间通信.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验报告班级011291班学生姓名学号实验成绩一、实验题目:实现最简单实用的通信程序socket.二、实验目的:通过对socket的编写,了解socket通信的原理.了解TCP通信的整个过程.以及Linux下C语言的socket函数.三、实验设备及环境:1.硬件设备:PC机一台2.软件环境:安装Linux操作系统,并安装相关的程序开发环境,如CC++tshbsh等编程语言环境。四、实验内容及要求:用C语言编程实现linux简单的聊天室功能。n用户程序命名为2.c;服务器程序命名为1.cn要求client可以通过socket连接servernClient与server可以相互通信
2、,实现交互五.代码(针对实验1,2,请将最终源代码粘贴至此;正式报告中将下面例子删除)服务端:#include#include#include#include#defineUNIX_DOMAIN"/tmp/UNIX.domain"intmain(void){socklen_tclt_addr_len;intlisten_fd;intcom_fd;intret;inti;charrecv_buf[1024];charsend_buf[1024];intlen;structsockaddr_unc
3、lt_addr;structsockaddr_unsrv_addr;listen_fd=socket(PF_UNIX,SOCK_STREAM,0);if(listen_fd<0){perror("cannotcreatecommunicationsocket");return1;}//setserveraddr_paramsrv_addr.sun_family=AF_UNIX;strncpy(srv_addr.sun_path,UNIX_DOMAIN,sizeof(srv_addr.sun_path)-1);unlink(UNIX_DOMAIN);//bindsockfd&addrr
4、et=bind(listen_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr));if(ret==-1){perror("cannotbindserversocket");close(listen_fd);unlink(UNIX_DOMAIN);return1;}//listensockfdret=listen(listen_fd,1);if(ret==-1){perror("cannotlistentheclientconnectrequest");close(listen_fd);unlink(UNIX_DOMAIN);return1;
5、}//haveconnectrequestuseacceptlen=sizeof(clt_addr);com_fd=accept(listen_fd,(structsockaddr*)&clt_addr,&len);if(com_fd<0){perror("cannotacceptclientconnectrequest");close(listen_fd);unlink(UNIX_DOMAIN);return1;}//readandprintfsentclientinfoprintf("=====info=====");for(i=0;i<4;i++){memset(rec
6、v_buf,0,1024);intnum=read(com_fd,recv_buf,sizeof(recv_buf));printf("client(%d)):%s",num,recv_buf);write(listen_fd,send_buf,sizeof(send_buf));}close(com_fd);close(listen_fd);unlink(UNIX_DOMAIN);return0;}客户端:#include#include#include#include#defineUN
7、IX_DOMAIN"/tmp/UNIX.domain"intmain(void){intconnect_fd;intret;charsnd_buf[1024],recv_buf[1024];inti;staticstructsockaddr_unsrv_addr;//creatunixsocketconnect_fd=socket(PF_UNIX,SOCK_STREAM,0);if(connect_fd<0){perror("cannotcreatecom