자바 멀티 캐스트 모드 프로그래밍을 사용하여 음성 채팅을 구현하려고합니다. 마이크에서 입력을 받아서 스피커에서들을 수 있습니다. 문제는 음성을들을 수 없습니다. 나는 그것을 통해 wireshark를 디버깅하고 내가 멀티 캐스트 그룹 주소로 패킷을 보낼 수 있고 내가 메시지를 볼 수 있지만 멀티 캐스트 그룹 주소에서 오는 패킷이 없음을 알 수 있습니다. 아무도 코드를보고 제게 잘못하고 있다면 알려주실 수 있습니까? 미리 감사드립니다.멀티 캐스트 프로그래밍을 사용하는 자바 음성 채팅
/보낸 코드/
공용 클래스 MulticastAudioSender {
public static final int IPM_PORT = 7778;
public static final String IPM_ADDRESS = "235.1.1.1";
public static final int SLEEP_MILLISECS = 1000;
private MulticastSocket sock;
private DatagramPacket sendPack;
public static final int BUFFER_SIZE = 20000;
public MulticastAudioSender(){
try {
sock = new MulticastSocket();
} catch(Exception e) {
System.out.println("Exception in creating socket or packet: "
+ e.getMessage());
}
}
private void sendMessage(byte[] soundData, int length) {
try {
sendPack = new DatagramPacket(soundData, length,
InetAddress.getByName(IPM_ADDRESS), IPM_PORT);
sock.send(sendPack);
//System.out.println("Message sent.");
} catch(Exception e) {
System.out.println("Exception in sending packet: "
+ e.getMessage());
}
}
public static void main(String[] args) throws Exception{
MulticastAudioSender sender = new MulticastAudioSender();
AudioFormat af = new AudioFormat(8000.0f,8,1,true,false);
DataLine.Info info = new DataLine.Info(TargetDataLine.class, af);
TargetDataLine microphone = (TargetDataLine)AudioSystem.getLine(info);
microphone.open(af);
microphone.start();
int bytesRead = 0;
byte[] soundData = new byte[1];
//sender.receiveMessage();
while(bytesRead != -1) {
bytesRead = microphone.read(soundData, 0, soundData.length);
if(bytesRead >= 0){
sender.sendMessage(soundData, soundData.length);
}
}
}
}
/수신기 코드/
공용 클래스 IPMulticastReceiver {
,451,515,public static final int IPM_PORT = 7778;
public static final String IPM_ADDRESS = "235.1.1.1";
public static final int BUFFER_SIZE = 200;
private MulticastSocket sock;
private DatagramPacket pack;
private byte[] receiveBuffer;
byte[] inSound;
SourceDataLine inSpeaker = null;
public IPMulticastReceiver(){
try {
sock = new MulticastSocket(IPM_PORT);
sock.joinGroup(InetAddress.getByName(IPM_ADDRESS));
AudioFormat af = new AudioFormat(8000.0f,8,1,true,false);
DataLine.Info info = new DataLine.Info(SourceDataLine.class, af);
inSpeaker = (SourceDataLine)AudioSystem.getLine(info);
inSpeaker.open(af);
} catch(Exception e) {
System.out.println("Exception in creating Socket or Packet: "
+ e.getMessage());
}
}
private void receiveMessage() {
try {
receiveBuffer = new byte[BUFFER_SIZE];
//sock.joinGroup(InetAddress.getByName(IPM_ADDRESS));
pack = new DatagramPacket(receiveBuffer, receiveBuffer.length);
sock.receive(pack);
/*Thread inThread = new Thread(new MultiCastSoundReceiver(receiveBuffer));
inThread.start();*/
inSpeaker.write(receiveBuffer, 0, receiveBuffer.length);
inSpeaker.drain();
} catch(Exception e) {
e.printStackTrace();
System.out.println("Exception in receiving packet: "
+ e.getMessage());
}
}
public static void main(String[] args) throws LineUnavailableException {
IPMulticastReceiver receiver = new IPMulticastReceiver();
while(true) {
receiver.receiveMessage();
}
}
}
안녕하세요, 답변 주셔서 감사합니다.하지만 여전히 멀티 캐스트 그룹 주소에서 패킷을 다시받지 못합니다. 프로그램에 다른 결함이 있습니까? – SMM