Pouvez-vous écrire à une sockets d'entrée et de sortie de flux en même temps?
J'ai une application Java qui est de la Voip. Je suis l'aide de la douille d'envoyer et de recevoir des informations en même temps via les threads. Le Code est ci-dessous ..
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();
Le problème que je trouve c'est que quand j'écris à l'outputstream, il bloque sur le premier à écrire. J'envoie pas le nombre d'octets. Soufflet est mon écriture de code.
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){}
}
}
L'autre thread qui lit le code de son est ...
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){}
}
}
J'ai commenté une bonne partie du code, depuis que je suis juste essayer de le faire fonctionner. Mon écriture des blocs de fonction indéfiniment sur le premier à écrire. Est-il possible que cela pourrait être un problème avec mon fils? Ma seule pensée est que le résultat et les flux d'entrée sont le partage de ma prise de l'objet qui peut provoquer un blocage ou quelque chose. S'il vous plaît laissez-moi savoir ce qui se passe.
OriginalL'auteur Dr.Knowitall | 2013-01-24
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez écrire à l'un de douilles d'entrée et de sortie de flux en même temps.
de faire-java-sockets-soutien-full-duplex
OriginalL'auteur Sumit Singh
Oui, vous pouvez écrire sur prise lors de la lecture , mais vous avez à lire, prise dans un thread indépendant. Je suis l'aide de ce concept. Ici l'exemple est (à lire attentivement, il prend en charge plusieurs clients en tant que bien ) :
À lire dans un thread indépendant pour plusieurs clients :
modifier le code selon vous l'exigence......
OriginalL'auteur Rajeev
La raison, il semble que mon write() est bloquant est parce que j'ai bêtement fermé le Socket() et mon flux d'entrée ne le savais pas. Par conséquent, aucune donnée n'est jamais envoyé. Stupide erreur de ma part.
OriginalL'auteur Dr.Knowitall