2012-07-13 161 views
3

客户端发送数据到服务器时出现问题。当我从服务器发送数据到客户端时,一切都很好。我收到了这条消息:“客户端接收:消息”,但当我发送“客户端消息”时,我的服务器没有收到它。客户端 - 服务器应用程序JAVA,服务器不接收数据

import java.io.IOException; 

import java.net.*; 
import java.io.*; 

public class Server {  
    public static void main(String[] args) throws IOException { 

     ServerSocket serverSocket = null; 
     try { 
      serverSocket = new ServerSocket(4444); 
     } catch (IOException e) { 
      System.err.println("Could not listen on port: 4444."); 
      System.exit(1); 
     } 

     Socket clientSocket = null; 
     try { 
      clientSocket = serverSocket.accept(); 
     } catch (IOException e) { 
      System.err.println("Accept failed."); 
      System.exit(1); 
     } 

     PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(
           new InputStreamReader(
           clientSocket.getInputStream())); 
     String inputLine, outputLine; 

     outputLine = "message"; 
     out.println(outputLine); 

     while ((inputLine = in.readLine()) != null) { 
      System.out.println("server receive: " + inputLine); 
      outputLine = "second message"; 
      out.println(outputLine); 
     } 

     out.close(); 
     in.close(); 
     clientSocket.close(); 
     serverSocket.close(); 
    } 
} 


public void actionPerformed(ActionEvent e) { 

    if (e.getSource() == startButton) { 
     this.main.getContentPane().remove(homePanel); 
     String name = this.name.getText(); 

     String result;    
     try { 
      connectionToServer(); 
      if ((result = in.readLine()) != null) { 
       System.out.println("client receive: " + result); 
       out.println("client's message"); 
      } 
     } catch(IOException err) { 
      System.out.println("error"); 
     } 

    }   
} 

public void connectionToServer() throws IOException { 
    try { 
     this.socket = new Socket("localhost", 4444); 
     this.in = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); 
     this.out = new PrintWriter(this.socket.getOutputStream(), true); 
    } catch (IOException e) { 
     System.err.println("Couldn't get I/O for the connection to: taranis."); 
     System.exit(1); 
    }   
} 
+2

比较你的方法这个工作[示例](http://stackoverflow.com/a/3245805/230513)。 – trashgod 2012-07-13 19:38:21

+1

问题可能出现在客户端代码中,这里还有一个相关的[示例](http://stackoverflow.com/a/9240450/1057230)。希望你不要阻塞你的'Event Dispatch Thread'! – 2012-07-14 16:49:22

+2

如果可能,您应该发布客户端代码。 – JeanValjean 2012-09-20 12:59:02

回答

1

你的actionPerformed方法只是连接服务器,什么都不做。

服务器在发送消息后关闭。

手表:而(!(inputLine = in.readLine())= NULL)

如果客户端不发送任何消息,代码将打破,那么你就关闭了服务器。