暂时的思路:
使用P2P的架构,每个客户端进行两个进程,分别是
- 作为服务端,
- 在线,等待其他的用户拨号,并且可以选择是否接受电话
- 当正在通话的时候,拒绝其他的连接
- 作为客户端
- 去连接其他的用户,如果返回的状态是接受,那么二者进入通话状态,这个时候开始传送语音
现在,对每个客户端每种状态的每个时刻进行状态的描述
每个电脑的其中一个客户端,分为几个状态,
这里以拨号方和接听方分别作描述
- 这个时候,当一个用户开启客户端程序后,则进入状态1
- 自动开启 9999 端口,等待TCP连接
- 当收到其他 IP 的TCP拨号请求,并且连接成功后,做以下动作
- 开启 3000 端口,等待 UDP 报文的传输
- 并且将收到的UDP报文转换为音频流,实时播放
- 调用本地获取音频的输入,并将实时的音频流通过UDP发送回对应拨号端的 3000 端口
- 这个时候,当一个用户开启客户端程序后,则进入状态1
- 自动开启 9999 端口,等待TCP连接
- 输入IP地址,通过TCP连接,如果连接成功
- 向对方的 3000 端口发送自己本地的音频流
- 开启自己的 3000 端口,等待对方发送的数据
- 将收到的 UDP 报文转换为实时的音频流输出播放
- 如果失败,给出错误提示