0

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

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

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

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

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

直到现在我从未使用过套接字,所以我不确定最好的方法是什么:

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

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

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

4

1 回答 1

0

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

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

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

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

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

于 2013-05-07T12:50:57.873 回答