여러 클라이언트가 서버에 연결할 수있는 Java 클라이언트 - 서버 응용 프로그램을 개발하려고합니다. 들어오는 각 클라이언트에 대해 별도의 스레드를 시작하고 클라이언트 소켓을 스레드에 전달한 다음 스트림을 열어 통신을 유지합니다. 그리고 java.io.StreamCorruptedException - 잘못된 코드 유형 AC가 있습니다.스트림 손상 예외 - 잘못된 코드 유형 AC [java]
내가 조사한 바에 따르면, 새로운 ObjectOutputStream을 사용하여 기존 ObjectInputStream에 쓰는 것을 의미합니다. 그러나, 나는이 코드를 어떻게 다루어야하는지 잘 모르겠다. 스트림 초기화를 위해 여러 곳을 시도했지만 여전히 제대로하지 못했다. 예외가 발생하는 행은 클라이언트 코드에 표시됩니다. IO 스트림에 대한 기본적인 이해가 부족합니다. 여기 내 서버 코드는 스레드가 클라이언트 연결 실행과 함께,이다 :
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
boolean listeningSocket = true;
try {
serverSocket = new ServerSocket(11111);
} catch (IOException e) {
System.err.println("Could not listen on port: 11111");
}
while(listeningSocket){
System.out.println("Waiting for a client to connect...");
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected!");
ConnectThread ct = new ConnectThread(clientSocket);
ct.start();
ct.run();
}
serverSocket.close();
}
을}
연결 스레드 :
public class ConnectThread extends Thread{
private Socket socket = null;
public ConnectThread(Socket socket) {
super("ConnectThread");
this.socket = socket;
}
@Override
public void run(){
ObjectOutputStream serverOutputStream = null;
ObjectInputStream serverInputStream = null;
try {
System.out.println("check");
serverOutputStream = new ObjectOutputStream(socket.getOutputStream());
System.out.println("check");
serverInputStream = new ObjectInputStream(socket.getInputStream());
serverOutputStream.writeInt(42);
System.out.println("check");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
serverOutputStream.close();
serverInputStream.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//implement your methods here
}
와 클라이언트 :
public class Client {
public static void main(String[] arg) {
Socket socketConnection = null;
ObjectOutputStream clientOutputStream = null;
ObjectInputStream clientInputStream = null;
try {
socketConnection = new Socket("127.0.0.1", 11111);
clientOutputStream = new ObjectOutputStream(
socketConnection.getOutputStream());
clientInputStream = new ObjectInputStream(
socketConnection.getInputStream());
System.out.println("check");
System.out.println(clientInputStream.readInt()); // HERE'S WHERE THE EXCEPTION OCCURS
} catch (Exception e) {
System.out.println("The following exception has occured and was caught:");
System.out.println(e);
}
finally{
try {
clientOutputStream.close();
clientInputStream.close();
socketConnection.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} 먼저이 비트를 수정해야