今天给出一个简单的无亲缘关系的客户端与服务器之间的通信,客户端发送服务器端进行接收,服务器端发送客户端进行接收。
服务器端的程序:
#include"utili.h"
int main(int argc,char**argv)
{
int write_fd;
int read_fd;
//mkfifo用于创建有名管道,
int res = mkfifo(write_fifo_name,O_CREAT|O_EXCL|S_IRUSR|S_IWUSR);
if(res == -1){
printf("make write fifo error.\n");
exit(1);
}
//打开文件write_fifo_name,以只读方式打开
write_fd = open(write_fifo_name,O_WRONLY);
if(write_fd == -1){
printf("open write fifo error.\n");
unlink(write_fifo_name);
exit(1);
}
printf("Wait Client Connect........\n");
//以只读方式打开read_fifo_name文件
while((read_fd = open(read_fifo_name,O_RDONLY)) == -1){
sleep(1);
}
printf("Client Connect Ok.\n");
char sendbuf[256];
char recvbuf[256];
while(1){
printf("Ser:>");
scanf("%s",sendbuf);
//将sendbuf的内容写到write_fd中
if((strncmp(sendbuf,"quit",4)) == 0){
unlink(write_fifo_name);
break;
}
write(write_fd,sendbuf,strlen(sendbuf) + 1);
read(read_fd,recvbuf,256);
printf("Cli:>%s\n",recvbuf);
}
return 0;
}
客户端的程序:
#include"utili.h"
int main(int arhc,char**argv)
{
int write_fd;
int read_fd;
int res = mkfifo(read_fifo_name,O_CREAT|O_EXCL|S_IRUSR|S_IWUSR);
if(res == -1){
printf("make read fifo error.\n");
exit(1);
}
read_fd = open(write_fifo_name,O_RDONLY);
if(read_fd == -1){
printf("Server Error.\n");
unlink(read_fifo_name);
exit(1);
}
write_fd = open(read_fifo_name,O_WRONLY);
if(write_fd == -1){
printf("Client Connect Server Error.\n");
exit(1);
}
char sendbuf[256];
char recvbuf[256];
while(1){
read(read_fd,recvbuf,256);
printf("Ser:>%s\n",recvbuf);
printf("Cli:>");
scanf("%s",sendbuf);
if((strncmp(sendbuf,"quit",4)) == 0){
unlink(read_fifo_name);
break;
}
write(write_fd,sendbuf,strlen(sendbuf) + 1);
}
return 0;
}
头文件uitil.h
#pragma once
#include<iostream>
#include<unistd.h>
#include<stdio.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
const char *write_fifo_name = "write_fifo";
const char *read_fifo_name = "read_fifo";
#define FILE_MODE O_CREAT|O_EXCL|S_IWUSR|S_IRUSR
程序执行结果:
服务器端:
客户端: