客户端服务器套接字-非阻塞I / O

时间:2018-08-25 06:17:41

标签: c sockets

我无法理解如何实现非阻塞I / O。这是我目前的架构:

服务器

  • 创建服务器套接字(socket()
  • bind()转换为IP的端口号
  • listen()用于传入连接
  • 进入while(1)循环{
    • accept()传入连接
    • 生成(fork())一个新的子进程来处理recv()send() ing

客户

  • 创建客户端套接字(socket()
  • connect()客户端套接字到服务器套接字
  • 进入while(1)循环{
    • pipe()为父级和子级进程创建管道文件描述符
    • stdin读取用户输入(始终可用,即不阻止)
      • 生成(fork())一个新的子进程来处理用户输入,send()recv()往返于服务器套接字的输入
      • 一旦子进程的输出准备就绪,write()会发送给父进程
    • 父级read()从子级输出消息并打印到终端,而不会阻塞stdin

我需要更改什么?我只希望能够在 client 终端中键入一条消息,让client子进程在后台与服务器通信,格式化输出和所有内容,然后一旦准备好输出,就可以了输出,而不会阻止我在 client 终端中输入更多请求。

例如,如果我要让终端机睡眠10秒钟,然后返回“我醒了!”在那段时间过去之后。同时,我无需等待 client 终端就能处理其他请求。

Enter a command: sleep 10
Enter a command: sendfile text.txt
Enter a command: echo money
money
Enter a command: echo hello
hello
I'm awake!
Enter a command: 

0 个答案:

没有答案