2015-04-03 152 views
0

我来自波兰,所以我对任何错误感到抱歉。
我编写了一段时间的小型服务器和客户端连接,当我停下来讨厌的问题。当我从客户端发送服务器信息(字符串)时,服务器可以得到它,但不能响应它。Java无法获得客户端或服务器响应

这里是代码。

客户

private static Socket socket; 

public static void main(String args[]){ 
    try{ 
     String host = "localhost"; 
     int port = 25002; 
     InetAddress address = InetAddress.getByName(host); 
     socket = new Socket(); 
     socket.connect(new InetSocketAddress(host, port), 5000); 

     //Send the message to the server 
     System.out.println("< "+sendMessage(socket)); 
     //socket.shutdownOutput(); 
     System.out.println("> "+getMessage(socket)); 
    }catch (SocketTimeoutException e){ 
     System.out.println(e.getMessage()); // changed 
    }catch (IOException e){ 
     System.out.println(e.getMessage()); // changed 
    }catch (IllegalBlockingModeException e){ 
     System.out.println(e.getMessage()); // changed 
    }catch(IllegalArgumentException e){ 
     System.out.println(e.getMessage()); // changed 
    }finally{ 
     //Closing the socket 
     try{ 
     socket.close(); 
     }catch(Exception e){ 
     System.out.println(e.getMessage()); // changed 
     } 
    } 
} 

public static String sendMessage(Socket client){ 
    try { 
     String message = "test"; 
     PrintWriter writer = new PrintWriter(client.getOutputStream(), true); 
     writer = new PrintWriter(client.getOutputStream(), true); 
     writer.print(message); 
     writer.flush(); 
     writer.close(); 
     return message; 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); // changed 
     return "false"; 
    } 
} 

public static String getMessage(Socket client){ 
      try { 
       BufferedReader socketReader = new BufferedReader(new InputStreamReader(client.getInputStream())); 
       return socketReader.readLine(); 
      } catch (IOException e){ 
       System.out.println(e.getMessage()); // changed 
       return "false"; 
      } 
     } 

和..服务器

public class kRcon{ 
     private static Socket socket; 
     private static ServerSocket serverSocket; 
     private static Thread u; 

     private static class Server extends Thread { 
       public void run() { 
         int port = 25002; 
         try { 
          serverSocket = new ServerSocket(port); 
         } catch (IOException e1) { 
          // TODO Auto-generated catch block 
          e1.printStackTrace(); 
         } 
         while(true) { 
          try { 
          socket = serverSocket.accept(); 
          BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
          BufferedWriter socketWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
          String str = socketReader.readLine(); 
         socketReader.close(); 
          System.out.println(str); 
          socketWriter.write("test"); 
          socketWriter.flush(); 
          socketWriter.close(); 
          } 
         }catch (IOException e1) { 
          e1.printStackTrace(); 
         } 
       } 
     public static void init(){ 
     try { 
      u = new Server(); 
      u.setName("Server"); 
      u.start(); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); // changed 
     } 
    } 
} 

结果
如果我启动服务器首先看起来不错。 所以,我开始parametr“测试”客户端,NAD输出到控制台是:

< test 
Socket is closed // changed 

在服务器端中的控制台I具有:

"test" 
Socket is closed // changed 

我试图关机输入和输出以及不能工作..我现在不知道该做什么。请帮助:C

编辑2015年4月3日
我已经改变了与评论“改变”行。

对于Google和读者 要解决问题,请不要在客户端关闭StreamReaders和StreamWriters。 感谢EJP,寻求帮助!
来自波兰的问候。

回答

0

当您收到异常时,请将其打印出来。不要只丢掉所有的信息。并且不要回复魔术Strings。在这种情况下,你应该让异常传播。如果你已经完成了所有你会看到异常SocketException: socket closedgetMessage(),抛出,你会有一些具体的调查,而不是一个完整的谜。

它是由关闭PrintWritersendMessage().引起的。关闭套接字的输入或输出流会关闭另一个流和套接字。

+0

美丽!有用! Thaaaank你! – kGielo 2015-04-03 08:37:10

相关问题