В настоящее время я пытаюсь создать простую программу VoIP впервые. Я сделал клиент, который успешно отправляет данные на удаленный сервер. У меня проблема повторной отправки существующих данных на сервер обратно к клиенту. Я не уверен, что сервер не отправляет должным образом или клиент не получает должным образом. Во время отладки я гарантировал, что при отправке данных клиенту (на сервере) IP-адрес и порт были правильными.
Код сервера:
try {
// Receive data
byte[] buffer = new byte[512];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
datagramSocket.receive(packet
// Send data
InetAddress address = packet.getAddress();
System.out.println("Received packet from: " + address.toString());
packet = new DatagramPacket(buffer, buffer.length, address, port);
datagramSocket.send(packet);
System.out.println("Sending packet to: " + address.toString());
} catch (IOException e) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, e);
}
Получение на клиенте:
try {
AudioFormat format = ClientVoice.getAudioFormat();
DataLine.Info infoOut = new DataLine.Info(SourceDataLine.class, format);
if (!AudioSystem.isLineSupported(infoOut)) {
System.out.println("Not supported!");
System.exit(0);
}
audioOut = (SourceDataLine) AudioSystem.getLine(infoOut);
audioOut.open(format);
audioOut.start();
PlaybackThread pt = new PlaybackThread(port, audioOut);
ClientVoice.playVoice = true;
pt.start();
} catch (LineUnavailableException e) {
Logger.getLogger(ClientVoice.class.getName()).log(Level.SEVERE, null, e);
}
public class PlaybackThread extends Thread {
public DatagramSocket din;
public SourceDataLine audioOut;
public PlaybackThread(int port, SourceDataLine speakers) {
try {
this.din = new DatagramSocket(port);
this.audioOut = speakers;
} catch (SocketException e) {
Logger.getLogger(ClientVoice.class.getName()).log(Level.SEVERE, null, e);
}
}
@Override
public void run() {
byte[] buffer = new byte[512];
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
while (ClientVoice.playVoice) {
try {
System.out.println("hi");
din.receive(incoming);
System.out.println("Incoming packet from: " + incoming.getAddress().toString());
buffer = incoming.getData();
audioOut.write(buffer, 0, buffer.length);
} catch (IOException e) {
Logger.getLogger(ClientVoice.class.getName()).log(Level.SEVERE, null, e);
}
}
audioOut.close();
audioOut.drain();
System.out.println("Stopping playback");
}
}
Спасибо за ваши решения! :)