目前我有一台服务器和一台客户端。客户端加入语音聊天室,麦克风产生的任何声音都会发送到服务器。一旦服务器收到它,它就会将其发送给所有连接的客户端。这就是我遇到问题的地方:
由于某种原因,此代码未播放音频。最终我希望它只播放其他客户端的音频,但是现在我只是想让它播放所有音频,但似乎无法做到。
以下是我的代码:
public class VoiceReceiveThread extends Thread{
public DatagramSocket din;
public SourceDataLine audio_out;
public DatagramSocket dout;
byte[] buffer = new byte[512];
@Override
public void run(){
int i = 0;
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
while (MainWindow.isVConnected) {
try {
din.receive(incoming);
buffer = incoming.getData();
audio_out.write(buffer, 0, buffer.length);
} catch (Exception e) {
e.printStackTrace();
}
}
audio_out.close();
audio_out.drain();
}
}
当我将din
设置为new DatagramSocket(null);
时,代码会运行,但不会给我任何反馈。我需要在特定端口上运行吗?我在做什么?
提前感谢您的帮助!
**编辑:**这是我的服务器,它大致相同。如果我从服务器收听音频它工作正常,它只有当我尝试从服务器发送回客户端时才会收到数据包。我再次浏览了我的代码,似乎是客户端没有收到数据包。
public class VoiceTransferThread extends Thread{
public DatagramSocket din;
public SourceDataLine audio_out;
public Socket s;
byte[] buffer = new byte[512];
public DatagramSocket dout;
@Override
public void run(){
int i = 0;
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
try {
dout = new DatagramSocket();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(s.getInetAddress() + " " + s.getPort());
while (RSVCServer.isVConnected) {
try {
din.receive(incoming);
buffer = incoming.getData();
//audio_out.write(buffer, 0, buffer.length);
DatagramPacket data = new DatagramPacket(buffer, buffer.length, s.getInetAddress(), s.getPort());
dout.send(data);
} catch (Exception e) {
e.printStackTrace();
}
}
audio_out.close();
audio_out.drain();
System.out.println("stop");
}
}