c - : 1 pipe and 1 socket, 或 1 个套接字哪个更好?

标签 c sockets stream two-way

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

服务器程序复制音频数据,并在几秒钟的线程中将副本放入指定的 FIFO 中。

如果 FIFO 的另一端没有客户端读取,也没关系,因为它只是阻塞 FIFO 线程。

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

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

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

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

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

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

最佳答案

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

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

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

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

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

关于c - : 1 pipe and 1 socket, 或 1 个套接字哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16419466/

相关文章:

java - 在没有 apache 库的情况下根据空格将行分割成字符串

c - 使用 C 替换文本文件中的每一行

c - C 文件中每行的字数

c - 返回随机值 1 或 0 的函数

c# - Observable TcpListener 在单连接后终止

c - C 中带有套接字的 POSIX 线程

java聊天服务器多个服务器套接字用于处理不同的功能

c - freopen() 和流的奇怪行为

javascript - 可视化来自远程对等连接的媒体流

C双缓冲区实现死锁?