Tôi có một ứng dụng Java là Voip. Tôi đang sử dụng một socket để gửi và nhận thông tin cùng một lúc thông qua các luồng. Mã được hiển thị bên dưới ..Bạn có thể ghi vào luồng đầu vào và đầu ra của ổ cắm cùng một lúc không?
Socket clientSocket = sockList.accept();
OutputStream outSock = clientSocket.getOutputStream();
InputStream inSock = clientSocket.getInputStream();
new Thread(new Capture(outSock)).start();
new Thread(new PlayAudio(inSock)).start();
outSock.close();
clientSocket.close();
Vấn đề mà tôi tìm thấy là khi tôi viết vào dòng đầu ra, nó chặn trên chữ viết đầu tiên. Tôi đang gửi không nhiều byte. Dưới đây là viết mã của tôi.
private class Capture implements Runnable{
private OutputStream out;
public Capture(OutputStream out){
this.out = out;
}
@Override
public void run() {
try{
int numBytesRead;
TargetDataLine outLine = getMic();
outLine.open();
outLine.start();
byte[] data = new byte[outLine.getBufferSize()/5];
byte[] test = {0x1,0x1,0x1};
while(true) {
//numBytesRead = outLine.read(data, 0, data.length);
//System.out.println(numBytesRead);
out.write(test, 0, test.length);
out.flush();
/*if(numBytesRead > 0){
out.write(data, 0, data.length);
System.out.println("C");
}*/
}
}catch(Exception ex){}
}
}
Các chủ đề khác mà đọc mã âm thanh ...
private class PlayAudio implements Runnable{
private InputStream in;
public PlayAudio(InputStream in){
this.in = in;
}
@Override
public void run() {
int write;
try{
SourceDataLine inLine = getSpeaker();
inLine.open();
inLine.start();
byte[] data = new byte[inLine.getBufferSize()];
byte[] test = new byte[3];
while(true){
System.out.println(1);
//write = in.read(data, 0, data.length);
in.read(test, 0 , test.length);
System.out.println(2);
/*if(write > 0){
inLine.write(data, 0, write);
System.out.println(3);
System.out.println(write);
}*/
}
} catch(Exception ex){}
}
}
tôi đã nhận xét một phần tốt đẹp của mã thực tế kể từ khi tôi chỉ cố gắng để có được nó để làm việc. Chức năng viết của tôi chặn vô thời hạn vào lần viết đầu tiên. Có thể điều này có thể là một vấn đề với chủ đề của tôi? Suy nghĩ duy nhất của tôi là các luồng đầu vào và đầu vào đang chia sẻ đối tượng socket của tôi có thể gây ra bế tắc hoặc cái gì đó. Xin vui lòng cho tôi biết whats up.
Tôi nghĩ rằng từ trong ra ngoài (hai dòng riêng biệt) là các đối tượng riêng biệt, hoạt động trên chúng cùng một lúc không quan trọng. Vì vậy, nói của bạn tôi vẫn nên lo lắng về đồng bộ hóa, bất kể? –