用socket实现进程间通信.docx

上传人:b****8 文档编号:29875625 上传时间:2023-08-03 格式:DOCX 页数:7 大小:111.53KB
下载 相关 举报
用socket实现进程间通信.docx_第1页
第1页 / 共7页
用socket实现进程间通信.docx_第2页
第2页 / 共7页
用socket实现进程间通信.docx_第3页
第3页 / 共7页
用socket实现进程间通信.docx_第4页
第4页 / 共7页
用socket实现进程间通信.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

用socket实现进程间通信.docx

《用socket实现进程间通信.docx》由会员分享,可在线阅读,更多相关《用socket实现进程间通信.docx(7页珍藏版)》请在冰豆网上搜索。

用socket实现进程间通信.docx

用socket实现进程间通信

 

实验报告

 

班级011291班

学生姓名

学号

实验成绩

 

一、实验题目:

实现最简单实用的通信程序socket.

二、实验目的:

通过对socket的编写,了解socket通信的原理.了解TCP通信的整个过程.以及Linux下C语言的socket函数.

三、实验设备及环境:

1.硬件设备:

PC机一台

2.软件环境:

安装Linux操作系统,并安装相关的程序开发环境,如C\C++\tsh\bsh等编程语言环境。

四、实验内容及要求:

用C语言编程实现linux简单的聊天室功能。

⏹用户程序命名为2.c;服务器程序命名为1.c

⏹要求client可以通过socket连接server

⏹Client与server可以相互通信,实现交互

五.代码(针对实验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_unclt_addr;

structsockaddr_unsrv_addr;

listen_fd=socket(PF_UNIX,SOCK_STREAM,0);

if(listen_fd<0)

{

perror("cannotcreatecommunicationsocket");

return1;

}

//setserveraddr_param

srv_addr.sun_family=AF_UNIX;

strncpy(srv_addr.sun_path,UNIX_DOMAIN,sizeof(srv_addr.sun_path)-1);

unlink(UNIX_DOMAIN);

//bindsockfd&addr

ret=bind(listen_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr));

if(ret==-1)

{

perror("cannotbindserversocket");

close(listen_fd);

unlink(UNIX_DOMAIN);

return1;

}

//listensockfd

ret=listen(listen_fd,1);

if(ret==-1)

{

perror("cannotlistentheclientconnectrequest");

close(listen_fd);

unlink(UNIX_DOMAIN);

return1;

}

//haveconnectrequestuseaccept

len=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;

}

//readandprintfsentclientinfo

printf("\n=====info=====\n");

for(i=0;i<4;i++)

{

memset(recv_buf,0,1024);

intnum=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);

return0;

}

客户端:

#include

#include

#include

#include

#defineUNIX_DOMAIN"/tmp/UNIX.domain"

intmain(void)

{

intconnect_fd;

intret;

charsnd_buf[1024],recv_buf[1024];

inti;

staticstructsockaddr_unsrv_addr;

//creatunixsocket

connect_fd=socket(PF_UNIX,SOCK_STREAM,0);

if(connect_fd<0)

{

perror("cannotcreatecommunicationsocket");

return1;

}

srv_addr.sun_family=AF_UNIX;

strcpy(srv_addr.sun_path,UNIX_DOMAIN);

//connectserver

ret=connect(connect_fd,(structsockaddr*)&srv_addr,sizeof(srv_addr));

if(ret==-1)

{

perror("cannotconnecttotheserver");

close(connect_fd);

return1;

}

memset(snd_buf,0,1024);

strcpy(snd_buf,"messagefromclient");

//sendinfoserver

for(i=0;i<4;i++)

{

gets(snd_buf);

write(connect_fd,snd_buf,sizeof(snd_buf));

memset(recv_buf,0,1024);

intnum=read(ret,recv_buf,sizeof(recv_buf));

printf("server(%d)):

%s\n",num,recv_buf);

}

close(connect_fd);

return0;

}

 

七、实验结果(请将最终实验结果截图粘贴至此,实验2示例已给出,正式报告中请删除)

在linux条件下编译:

输入cdwork11,进入文件work11(本机程序1.c和2.c放在文件work11中)。

输入gcc1.c–o1对程序1.c进行编译

输入gcc2.c–o2对程序2.c进行编译

如果没错误,就不会提示错误,可以正常操作。

具体操作见下截图。

运行1.exe和2.exe程序,输入指令./1&./2,程序就会自动运行,截图如下:

然后即可进入交互式对话,

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1