Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 什么';好一点的方法是:一根管子和一个插座,还是一个插座?_C_Sockets_Stream_Two Way - Fatal编程技术网

C 什么';好一点的方法是:一根管子和一个插座,还是一个插座?

C 什么';好一点的方法是:一根管子和一个插座,还是一个插座?,c,sockets,stream,two-way,C,Sockets,Stream,Two Way,我有一个服务器程序,它处理音频数据并将其传递给音频驱动程序 服务器程序复制音频数据,并将副本放入秒线程中命名的FIFO中 如果FIFO的另一端没有客户机读取,这无关紧要,因为它只是阻塞了FIFO线程 现在,我想添加一个“控制”功能,如“增加音量、加快播放速度等”,以便最终连接的客户端可以控制服务器程序 重要的是:如果客户端最终断开连接(通过close()或abort),服务器会检测到这一点,并应返回到正常模式,并忘记来自客户端的所有命令 到目前为止,我从未使用过插座,所以我不确定最好的方法是什么

我有一个服务器程序,它处理音频数据并将其传递给音频驱动程序

服务器程序复制音频数据,并将副本放入秒线程中命名的FIFO中

如果FIFO的另一端没有客户机读取,这无关紧要,因为它只是阻塞了FIFO线程

现在,我想添加一个“控制”功能,如“增加音量、加快播放速度等”,以便最终连接的客户端可以控制服务器程序

重要的是:如果客户端最终断开连接(通过close()或abort),服务器会检测到这一点,并应返回到正常模式,并忘记来自客户端的所有命令

到目前为止,我从未使用过插座,所以我不确定最好的方法是什么:

  • 按原样使用服务器->客户端的FIFO,并添加一个仅用于客户端->服务器通信的套接字

  • 使用一个套接字传输服务器->客户端,并从客户端->服务器发出命令(字节格式?)


  • 我会使用“AF_UNIX,SOCK_STREAM”作为套接字。#2是更好的变体吗?我如何确定客户端是否在没有close()的情况下断开连接?

    我投票选择第2项,可能的解决方案是:

    1-创建套接字[sock_stream….]

    2-fork()[继承套接字描述符]

    -father[use to read];
    -son[use to write];
    

    当套接字描述符中的read()返回0字节时,可以实现检测客户端断开连接

    使用多个连接执行不同的操作并不少见,请参见FTP示例。但是如果协议允许的话,你也可以使用同一个连接做不同的事情。好的,客户端也做同样的事情,是吗?一个线程/分支接收数据,另一个最终写入命令?您知道如何确定客户端是否在没有正确关闭的情况下退出吗?是的,这样它可以在两个方面都是双向的,并且可以确定,因为当读取(从sock fd)返回0字节时,表示另一端已关闭或断开