套接字不读取数据

时间:2014-03-07 08:11:23

标签: java sockets

我正在尝试一个简单的Java程序来发送和接收数据......服务器发送数据并且客户端接收到...但这会生成Socket异常:连接重置

这是我发送Integer值的服务器端代码...

try {
   ServerSocket server = new ServerSocket(9089);

   Socket socket = server.accept();

   OutputStream out = socket.getOutputStream();
   out.write(12);
   out.flush();
   System.out.println("Data Sent....");
   Thread.sleep(5000);
} catch(Exception  e) {
   System.out.println("Server Error : " + e.toString());
}

这是我的客户端代码,用于接收Int值...

try {
   Socket client = new Socket(InetAddress.getLocalHost(), 9089);
   System.out.println("Connected ....");

   InputStream in = client.getInputStream();
   while(in.available()>0)
   {
      System.out.println("Unavailable...");
   }
   System.out.println("Received : " + in.read() );
   in.close();
} catch(Exception e) {
   System.out.println("Sender Error : " + e.toString());
}

3 个答案:

答案 0 :(得分:1)

在您的客户端代码中,我认为您必须更改while循环的条件:

while(in.available()==0) {
    System.out.println("Unavailable...");
}
System.out.println("Received : " + in.read() );
in.close()

答案 1 :(得分:1)

   while(in.available()>0)
   {
      System.out.println("Unavailable...");
   }

这没有任何意义。 available()返回 可用的字节数。如果结果是肯定的,则数据可用,不可用。

然而,这个循环完全没有意义,应该完全删除。只要有必要,以下read()将会阻止。

答案 2 :(得分:0)

我会说这段代码

while(in.available()>0)
{
    System.out.println("Unavailable...");
}
如果数据可用,

会导致无限循环。

尝试

while(in.available() == 0)