0
내가이 question에서 언급했듯이, 나는 SocketException : Connection reset을 얻고 있었다.
Aaron의 대답을 구현 한 후 의도 한대로 작동하는 것으로 보입니다. 하지만 오늘 코드를 다시 실행하면 연결 재설정 오류가 다시 발생합니다.
문제는 ... 내가 5 배처럼 내 코드를 실행하는 경우, 2/5 시간을 작동하는 것 같다 나머지는 나에게 오류를 제공한다는 것입니다무작위 SocketException : 연결 재설정
서버 :
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ServerSocket server = new ServerSocket(444);
while (true) {
Socket socket = server.accept();
ObjectInputStream objIn = new ObjectInputStream(socket.getInputStream());
Object objRead = objIn.readObject();
if (objRead != null) {
System.out.println(objRead);
}
}
}
}
클라이언트 :
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.util.HashMap;
public class Client {
public static void main(String[] args) throws IOException {
Socket sock;
int port = 444;
HashMap<Integer, String> mapSend= new HashMap<>();
mapSend.put(1,"row1");
mapSend.put(2,"row2");
sock = new Socket(InetAddress.getLocalHost(), port);
ObjectOutputStream objOut = new ObjectOutputStream(sock.getOutputStream());
objOut.writeObject(mapSend);
objOut.flush();
}
}
이 오류입니다 :
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:189)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2308)
at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2716)
at java.io.ObjectInputStream$BlockDataInputStream.readFully(ObjectInputStream.java:2740)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1978)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at java.util.HashMap.readObject(HashMap.java:1154)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at iotest.Server.main(Server.java:16)
: (이 서버의 출력에 나타납니다 나는 클라이언트를 실행 한 후)
클라이언트 측에서 오류가 발생하지 않습니다.
수정
클라이언트 - 서버를 디버깅 할 수있는 방법은 없나요? 그게 당신에게 더 많은 정보를 줄 수 있도록 도와 줄 수 있습니다.
ObjectOutputStream을 닫으면 flush() 후에 문제가 해결됩니다. 고맙습니다. – akafortes
@akafortes 닫기로 설정하면 완전히 플러시 할 필요가 없습니다. – EJP