1、用socket实现进程间通信实 验 报 告 班级 011291 班 学生姓名 学号 实验成绩 一、 实验题目:实现最简单实用的通信程序socket.二、 实验目的:通过对socket的编写,了解socket通信的原理.了解TCP通信的整个过程.以及Linux下C语言的socket函数.三、 实验设备及环境:1. 硬件设备:PC机一台2. 软件环境:安装Linux操作系统,并安装相关的程序开发环境,如C C+tshbsh等编程语言环境。四、 实验内容及要求: 用C语言编程实现linux简单的聊天室功能。 用户程序命名为2.c;服务器程序命名为1.c 要求client可以通过socket连接ser
2、ver Client与server可以相互通信,实现交互 五 代码(针对实验1,2,请将最终源代码粘贴至此;正式报告中将下面例子删除)服务端:#include #include #include #include #define UNIX_DOMAIN /tmp/UNIX.domainint main(void) socklen_t clt_addr_len; int listen_fd; int com_fd; int ret; int i; char recv_buf1024; char send_buf1024; int len; struct sockaddr_un clt_addr;
3、 struct sockaddr_un srv_addr; listen_fd=socket(PF_UNIX,SOCK_STREAM,0); if(listen_fd0) perror(cannot create communication socket); return 1; /set server addr_param srv_addr.sun_family=AF_UNIX; strncpy(srv_addr.sun_path,UNIX_DOMAIN,sizeof(srv_addr.sun_path)-1); unlink(UNIX_DOMAIN); /bind sockfd & addr
4、 ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr); if(ret=-1) perror(cannot bind server socket); close(listen_fd); unlink(UNIX_DOMAIN); return 1; /listen sockfd ret=listen(listen_fd,1); if(ret=-1) perror(cannot listen the client connect request); close(listen_fd); unlink(UNIX_DOMAIN);
5、 return 1; /have connect request use accept len=sizeof(clt_addr); com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len); if(com_fd0) perror(cannot accept client connect request); close(listen_fd); unlink(UNIX_DOMAIN); return 1; /read and printf sent client info printf(n=info=n); for(i=0;i4;i+) m
6、emset(recv_buf,0,1024); int num=read(com_fd,recv_buf,sizeof(recv_buf); printf(client (%d) :%s n,num,recv_buf); write(listen_fd,send_buf,sizeof(send_buf); close(com_fd); close(listen_fd); unlink(UNIX_DOMAIN); return 0;客户端:#include #include #include #include #define UNIX_DOMAIN /tmp/UNIX.domainint mai
7、n(void) int connect_fd; int ret; char snd_buf1024,recv_buf1024; int i; static struct sockaddr_un srv_addr;/creat unix socket connect_fd=socket(PF_UNIX,SOCK_STREAM,0); if(connect_fd0) perror(cannot create communication socket); return 1; srv_addr.sun_family=AF_UNIX; strcpy(srv_addr.sun_path,UNIX_DOMA
8、IN);/connect server ret=connect(connect_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr); if(ret=-1) perror(cannot connect to the server); close(connect_fd); return 1; memset(snd_buf,0,1024); strcpy(snd_buf,message from client);/send info server for(i=0;i4;i+) gets(snd_buf); write(connect_fd,snd_buf,
9、sizeof(snd_buf); memset(recv_buf,0,1024); int num=read(ret,recv_buf,sizeof(recv_buf); printf(server (%d) :%s n,num,recv_buf); close(connect_fd); return 0;七、实验结果(请将最终实验结果截图粘贴至此,实验2示例已给出,正式报告中请删除)在linux条件下编译: 输入 cd work11,进入文件work11(本机程序1.c和2.c放在文件work11中)。 输入gcc 1.c o 1对程序1.c进行编译 输入gcc 2.c o 2对程序2.c进行编译如果没错误,就不会提示错误,可以正常操作。具体操作见下截图。运行1.exe和2.exe程序,输入指令./1 & ./2,程序就会自动运行,截图如下: 然后即可进入交互式对话,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1