Ошибка голосового чата Java

Я делаю программу голосового чата. У меня есть два сервера один для голоса и один для сообщений. Когда я соединяю двух человек, я получаю эту ошибку, спасибо заранее. Я приложил код клиента, код ClientAudio и код получения клиента

java.io.StreamCorruptedException: invalid type code: 00
at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2508)
at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2543)
at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2702)
at java.io.ObjectInputStream.read(ObjectInputStream.java:865)
at client.chat$ClientAudioRec.run(chat.java:388)
at java.lang.Thread.run(Thread.java:745)

его вызов ошибки на

try {
    bytesRead = ((ObjectInput) i2).read(inSound, 0, inSound.length);
} catch (Exception e) {
    e.printStackTrace();
}

Код

    public class Client implements Runnable {                                                   // CLIENT
    private String msg;
    public void run() {
        try {
            s1 = new Socket(ipAddress, port);
            s2 = new Socket(ipAddress, 1210);
            o1 = new ObjectOutputStream(s1.getOutputStream());
            o1.writeObject(name);
            serverListModel.addElement(name);
            i1 = new ObjectInputStream(s1.getInputStream());
            Thread voice = new Thread(new ClientAudio());
            voice.start();
            while(true) {
                msg = (String) i1.readObject();
                    String[] namePart = msg.split("-");
                    if(namePart[0].equals("AddName") && !namePart[1].equals(name) && !serverListModel.contains(namePart[1])) {
                        serverListModel.addElement(namePart[1]);
                    }
                    if(namePart[0].equals("RemoveName") && !namePart[1].equals(name)) {
                        serverListModel.removeElement(namePart[1]);
                    }
                    if(!msg.equals(null) && !namePart[0].equals("AddName") && !namePart[0].equals("RemoveName")) {
                        chatWindow.append(msg+"\n");
                    }
                }
        } catch (IOException | ClassNotFoundException e) {
            chatWindow.append("Server Closed");
            e.printStackTrace();
            try {
                s1.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            mainWindow(true);
        }
    }
}

public class ClientAudio implements Runnable {                                                  // CLIENT AUDIO
    public void run() {
        try {
            o2 = new ObjectOutputStream(s2.getOutputStream());
            System.out.println("AUDIO");
            int bytesRead = 0;
            byte[] soundData = new byte[1];
            Thread car = new Thread(new ClientAudioRec());
            car.start();

            while(true) {
                bytesRead = mic.read(soundData, 0, bytesRead);
                if(bytesRead >= 0) {
                    o2.write(soundData, 0, bytesRead);
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

public class ClientAudioRec implements Runnable {                                                       // CLIENT AUDIO REC

    public void run() {
        i2 = new ObjectInputStream(s2.getInputStream());
        System.out.println("REC");
        SourceDataLine inSpeaker = null;
        DataLine.Info info = new DataLine.Info(SourceDataLine.class, af);
        try {
            inSpeaker = (SourceDataLine)AudioSystem.getLine(info);
            inSpeaker.open(af);
        } catch (LineUnavailableException e1) {
            System.out.println("ERROR 22");
            e1.printStackTrace();
        }

        int bytesRead = 0;
        byte[] inSound = new byte[100];
        inSpeaker.start();
        while(bytesRead != -1)
        {
            try{
                bytesRead = ((ObjectInput) i2).read(inSound, 0, inSound.length);
                } catch (Exception e){
                e.printStackTrace();
            }
            if(bytesRead >= 0)
            {
                inSpeaker.write(inSound, 0, bytesRead);
            }
        }
    }
}

person Marcus Mardis    schedule 28.04.2016    source источник
comment
Почему у вас есть массив байтов только с 1 байтом в нем   -  person Natecat    schedule 29.04.2016
comment
это не проблема   -  person Marcus Mardis    schedule 29.04.2016
comment
Проблема связана с i2, но вы не показали нам этот код   -  person Natecat    schedule 29.04.2016
comment
Я добавил клиентский код, клиентский аудиокласс и клиентский класс приема.   -  person Marcus Mardis    schedule 29.04.2016
comment
Возможный дубликат java.io.StreamCorruptedException: недопустимый код типа: 00   -  person Natecat    schedule 29.04.2016
comment
Вы пытаетесь использовать i2 из двух разных потоков, что вызывает вашу проблему. Синхронизируйте это.   -  person Natecat    schedule 29.04.2016
comment
Я перенес инициализацию i2 в тот же поток. Я больше нигде не использую i2.   -  person Marcus Mardis    schedule 29.04.2016
comment
Это моя версия до того, как я внедрил ее в свою текущую программу, и она отлично работает. предыдущий код   -  person Marcus Mardis    schedule 29.04.2016