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