无亲缘关系的客户与服务器

本文介绍了一种简单的无亲缘关系客户端与服务器之间的通信方式,包括服务器端和客户端的程序实现,使用有名管道进行数据交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天给出一个简单的无亲缘关系的客户端与服务器之间的通信,客户端发送服务器端进行接收,服务器端发送客户端进行接收。

    服务器端的程序:

#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

程序执行结果:
服务器端:

客户端:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值