Ich habe eine Java-Anwendung, die Voip ist. Ich benutze die eine Buchse, um Informationen über Threads gleichzeitig zu senden und zu empfangen. Code ist unten dargestellt ..Können Sie gleichzeitig in einen Eingabe- und Ausgabestream für Sockets schreiben?
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();
Das Problem, das ich bin Feststellung ist, dass, wenn ich schreibe an den Output, blockiert es auf dem ersten Schreib. Ich sende nicht viele Bytes. Bellow ist mein Schreibcode.
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){}
}
}
Der andere Thread, der Sound Code liest ...
istprivate 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){}
}
}
ich einen guten Teil des eigentlichen Code kommentiert habe, seit ich es zur Arbeit zu kommen gerade bin versucht. Meine Schreibfunktion blockiert beim ersten Schreiben unbegrenzt. Ist es möglich, dass dies ein Problem mit meinen Threads sein könnte? Mein einziger Gedanke ist, dass die Ausgabe- und Eingabeströme mein Socket-Objekt teilen, was zu einem Deadlock oder etwas führen kann. Bitte lassen Sie mich wissen, was los ist.
Ich dachte, dass, da In- und Out (zwei getrennte Ströme) getrennte Objekte sind, es nicht wichtig ist, auf ihnen gleichzeitig zu arbeiten. Also mein Sprichwort, ich sollte mir trotzdem Sorgen um Synchronisation machen? –