2013-09-23 37 views
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) 

在客户端,我没有任何错误。

编辑
任何方式我可以调试客户端服务器?这可能有助于给你们更多的信息。

回答

1

关闭输出流,而不是只刷新它。

NB readObject()不会返回null,除非您写入null。测试毫无意义。

+0

在flush()之后关闭ObjectOutputStream,解决了这个问题。 非常感谢你 – akafortes

+0

@akafortes如果关闭它,你根本不需要冲洗。 – EJP

相关问题