내 서버는 스레드에서이 코드를 실행하므로 클라이언트가 연결되기를 기다리는 동안 GUI와 상호 작용할 수 있습니다. (현재 클라이언트와 서버는 각각 1 개만 사용하고 있습니다.)서버 클라이언트 응용 프로그램에 대한 StreamCorruptedException
@Override
public void run() {
Socket client = null;
MessageListener listener = null;
try {
client = server.accept();
oos = new ObjectOutputStream(client.getOutputStream());
ois = new ObjectInputStream(client.getInputStream());
listener = new MessageListener(ois);
(new Thread(listener)).start();
} catch (IOException e) {
e.printStackTrace();
}
}
내 고객은 입력/출력 스트림을 서버에 연결하여 해결하기 위해 한 번이 코드를 실행합니다
try {
ois = new ObjectInputStream(server.getInputStream());
MessageListener listener = new MessageListener(ois);
oos = new ObjectOutputStream(server.getOutputStream());
(new Thread(listener)).start();
} catch (IOException e) {
e.printStackTrace();
}
MessageListener를 메시지를 incomming 확인하기 위해 스레드를 실행합니다.
@Override
public void run() {
while (true) {
Message message = null;
try {
message = (Message) in.readObject();
if (message != null) {
System.out.println(message.getName());
}
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}
}
그러나, 나는 내 프로그램을 시작할 때, 처음에 난 단지 서버에서 클라이언트로 보낼 수 있으며, 다른 방법은 주위에 (난 그냥 클라이언트 GUI와 상호 작용할 수 없습니다). 나는 다음과 같은 오류 메시지가 나타납니다 서버에서 클라이언트로 첫 번째 메시지를 전송하면 :
java.io.StreamCorruptedException: invalid type code: 6F
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at com.jale.chat.iohandling.MessageListener.run(MessageListener.java:25)
at java.lang.Thread.run(Unknown Source)
편집 : 나는 첫 번째 오류 메시지가받은 후에, 나는 단지 실제로 전송 (클라이언트에서 서버로 보낼 수 있습니다 작품)하지만 오류 메시지가 내 콘솔을 계속 스팸.
라인 MessageListener를 25 :
message = (Message) in.readObject();
는 일반적인 문제로, 구글/스택 오버플로 아무것도 발견하지 않았습니다 때 점점
StreamCorruptedException
가 될 것으로 보인다 때 사람들이 여러 개 열려
InputStreams
또는 단일 소켓에 대한
OutputStreams
, 그러나 나는 그렇게하지 않는다. 어떤 도움이라도 대단히 감사하겠습니다.
필자는 서버 또는 클라이언트로 시작하기 위해 시작한 프로젝트를 하나만 선택 했으므로 실제로는 그렇지 않습니다. 게다가, 나는 간단한 문자열을 보낼 때 같은 문제가있다. –
이것은 'serialVersionUID' 문제가 아닙니다. 그게 당신이 모호하게 말하는 것이라면. – EJP