用socket实现进程间通信

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档