用socket实现进程间通信
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
班级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
#define UNIX_DOMAIN "/tmp/UNIX.domain"
int main(void)
{
socklen_t clt_addr_len;
int listen_fd;
int _fd;
int ret;
int i;
char recv_buf[1024];
char send_buf[1024];
int len;
struct sockaddr_un clt_addr;
struct sockaddr_un srv_addr;
listen_fd=socket(PF_UNIX,SOCK_STREAM,0);
if(listen_fd<0)
{
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_pat h)-1);
unlink(UNIX_DOMAIN);
//bind sockfd & addr
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);
return 1;
}
//have connect request use accept
len=sizeof(clt_addr);
_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len); if(_fd<0)
{
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;i<4;i++)
{
memset(recv_buf,0,1024);
int num=read(_fd,recv_buf,sizeof(recv_buf));
printf("client (%d)) :%s \n",num,recv_buf);
write(listen_fd,send_buf,sizeof(send_buf));
}
close(_fd);
close(listen_fd);
unlink(UNIX_DOMAIN);
return 0;
}
客户端:
#include
#include
#include
#include
#define UNIX_DOMAIN "/tmp/UNIX.domain"
int main(void)
{
int connect_fd;
int ret;
char snd_buf[1024],recv_buf[1024];
int i;
static struct sockaddr_un srv_addr;
//creat unix socket
connect_fd=socket(PF_UNIX,SOCK_STREAM,0);