socketpair 进程间全双工通信

原创 2016年06月01日 14:01:01
include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
using namespace std;
void err_sys(const char *errmsg);
class Person
{
  public:
   void say(string str )
   {
     int n;
     printf("%s say %s\n",name_.c_str(),str.c_str());
     if((n = write(say_sock_, str.c_str(), str.size() ))<0)
     {
        err_sys("write error!\n");
     }
   }
   string hear()
   {
     int n;
     string res;
     char s[1024];
     if ((n = read(hear_sock_,s , sizeof(s))) >0)
     {
        s[n]=0;
        res += s;
     }
     printf("%s hear %s\n",name_.c_str(),res.c_str());
     return res;
   }
   int say_sock_;
   int hear_sock_;
   Person()
   {
     say_sock_ = -1;
hear_sock_ = -1;
   }
   string name_;
};
int main(void)
{
        int sockfd1[2];
        pid_t pid;
        Person p1,p2;
        p1.name_="p1";
        p2.name_ = "p2";
        if ((socketpair(AF_LOCAL, SOCK_STREAM, 0, sockfd1))<0)
                err_sys("socketpair");
        if ((pid = fork()) == -1)
                err_sys("fork");
        else if (pid == 0)
        { /* child process */
                        p1.say_sock_ = sockfd1[0];
                        p1.hear_sock_ = sockfd1[0];

                        p1.say("hello world");
                        p1.hear();
                        p1.say("chile");
                        sleep(1);
        }
        else if (pid > 0)
        { /* parent process */
                        p2.hear_sock_ = sockfd1[1];
                        p2.say_sock_ = sockfd1[1];
                        p2.say("chifanlema ?");
                        p2.hear();
                        sleep(1);
        }
        return 0;
}
void err_sys(const char *errmsg)
{
        perror(errmsg);
        exit(1);
}
     

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

socketpair创建双向通信的管道(全双工通信)

socketpair创建双向通信的管道(全双工通信)

Linux下用管道实现进程全双工通信的代码

直接看代码, 里面已经有注释了。   主程序: int main() { char buf[256]; int fdin[2]; int fdout[2]; int p...

套接字(全双工)实现进程间通信

特点: sv【0】和sv【1】可读可写。每个进程固定用一个接口。 写数据时:通道不满不阻塞; 读数据时:通道里没数据时阻塞。可用fcntl设置为非阻塞。 创建: int socketpair...

由进程间通讯引发的对半双工和全双工的思考

使用方法才是确定管道是全双工还是半双工的真正定义来源.而并不单单是一个特性.

全双工实现服务器与客户端的通信

/* * 服务器端 */ package TestServer; import javax.swing.*; import java.awt.*; import java.io.*; impor...

让C/S进行全双工通信的WebSocket协议

超文本传输协议(HTTP)作为一种简单的协议,在面对功能日益丰富的 Web应用时,遇到了如下瓶颈:1、在客户端请求时,会建立一个TCP连接,然后发送请求,服务端给出响应,然后连接就关闭了。(现在的HT...

485全双工通信

  • 2012-09-12 03:21
  • 150KB
  • 下载

java实现全双工串口通信

  • 2012-12-04 18:30
  • 3.46MB
  • 下载

java socket实现全双工通信

单工、半双工和全双工的定义      如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。    如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称...

全双工无线通信在ns3上的实现

全双工无线通信在ns3上的实现(资料整理)  本文简单介绍一种全双工通信的ns3实现。作者在ns-3.20中的wifi模块的基础上,实现了全双工模块fdwifi,从而全双工无线...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)