利用可命名管道实现简易本地聊天室

说明
①虽然说是本地聊天室,但是由于个人能力的原因,只是实现了两个客户端的通信。
服务器客户端介绍
①服务器编写中先定义三个管道,以及进行宏定义。然后定义文件描述符,和读写buf。创建一个公共管道,并对其进行属性设置,并依照次上述步骤,分别完成对私有管道1和私有管道2的设置。接下来循环执行功能,首先进行打开,然后进行判断为哪个客户端。若为客户端1,打开私有管道1,然后接收信息,并输出在屏幕上。
②客户端对公共管道和私有管道、文件描述符、读写buf进行定义。私有管道,并进行内容的读出。使用fork产生父子进程,子进程中进行数据的读出。打开私有管道1,把数据读出并打印。在父进程中,进行数据的写入。打开公共管道并输入数据。若输入end,则子进程,删除管道,并打印退出。客户端2一此类推。
使用说明
①分别在三个terminal中输入./srever、./client1、./client2,在客户端1或客户端2输入内容,服务器可接收两个客户端的内容,并进行识别。在两个客户端中分别可显示自己的内容已经发送和辨别来自不同客户端的内容。
运行结果
在这里插入图片描述
源码

server.c
#include<stdio.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<linux/stat.h>

#define PUBLIC_FIFO "PUBFIFO"
#define PRIVATE1_FIFO "PRIFIFO1"
#define PRIVATE2_FIFO "PRIFIFO2"
#define PRIVATE1_HEADER "Client1's message:"
#define PRIVATE2_HEADER "Client2's message:"
#define SERVER_REPLY "Send message successfully,"

int main()
{
   
	int pubfd;
	int prifd1;
	int prifd2;
	char str1[40] = "Client1 loading successfully.";
	char str2[40] = "Client2 loading successfully.";
	char readbuf[80] = "";
	umask(0);
	mknod(PUBLIC_FIFO,S_IFIFO|0666,0);
	mknod(PRIVATE1_FIFO,S_IFIFO|0666,0);
	mknod(PRIVATE2_FIFO,S_IFIFO|0666,0);

	prifd1=open(PRIVATE1_FIFO,O_CREAT|O_WRONLY);
	prifd2=open(PRIVATE2_FIFO,O_CREAT|O_WRONLY);

	write(prifd1,str1,strlen(str1));
	write(prifd2,str2,strlen(str2));

	close(prifd1);
	close(prifd2);

	printf("Write data to client.\n");

	while(1)
	{
   
		memset(readbuf,0,80);
		if((pubfd = open(PUBLIC_FIFO,O_RDWR))==-1)
		{
   
			printf("Open fifo failed.\n");
			exit(1);
		}
		if(read(pubfd,readbuf,80)!=-1)
		{
   
			printf("Received string:%s\n",readbuf);
			close(pubfd);
		}
		if(strncmp(readbu
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值