2013-04-30 20 views
0

我试图从客户端发送一个int值到服务器。这是我使用下面的客户端代码:错误而使用的InputStreamReader与Java

_port = 8071; 
_socket = new Socket("localhost", _port); 

Random rand = new Random(); 
int n = rand.nextInt(50) + 1; 
DataOutputStream dos = new DataOutputStream(_socket.getOutputStream()); 
dos.writeInt(n); 
dos.flush(); 

服务器代码

try { 
    input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

    ObjectInputStream in = null; 
    in = new ObjectInputStream(socket.getInputStream()); 
    int ClientNumber= in.readInt(); 
    System.out.println(ClientNumber); 
} 

,但我得到一个无效的流头错误。

无效流报头:0000002B处 ServiceRequest.run java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:781) 在java.io.ObjectInputStream中(ObjectInputStream.java:278)(ServiceRequest。 java:24)at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:439) at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303) at java.util。并发.FutureTask.run(FutureTask.java:138)at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.T hreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:918) 在java.lang.Thread.run(Thread.java:680)

有谁知道是什么原因造成的错误?我的代码安装不正确?

+0

你为什么要创建一个'InputStreamReader的,在'BufferedReader'包裹,然后完全无视它? – 2013-04-30 16:17:26

回答

1

使用DataOutputStream阅读使用ObjectInputStream。您应该使用DataInputStream代替:

// Note declaration and assignment in a single statement. There's no point in 
// making it null first. 
DataInputStream in = new DataInputStream(socket.getInputStream()); 

// Note use of camelCase for variable name 
int clientNumber = in.readInt(); 

你也应该摆脱input在这里:你不能从中读,因为这看起来像它的二进制数据流,这是不恰当的对待它作为文本。

哦,你应该在finally块中关闭的输入流。

0

试图改变它这样

try { 
      // input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      DataInputStream in = new DataInputStream(socket.getInputStream()); 
      int clientNumber= in.readInt(); 
      System.out.println(clientNumber); 
} 

它应该工作。 ObjectInputStream中只能读取由ObjectOuputStream发送数据流,它与一个幻数(头)0xACED,开始看到http://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html