2012-05-22 154 views
0

您好我想了解如何套接字工作可以实现一个多玩家端到垄断game.I理解如何创建连接,但现在看来我有困难之间发送和接收数据客户端和服务器。这里是我的代码:Java套接字发送和接收数据

客户端代码:

public class EchoClient 
{ 
    public static void main(String[] args) 
    { 
    Socket echoSocket = null; 
    PrintWriter out = null; 
    BufferedReader in = null; 

    try 
    { 
     echoSocket = new Socket("127.0.0.1", 5000);; 
     out = new PrintWriter(echoSocket.getOutputStream()); 
     in = new BufferedReader(
      new InputStreamReader(echoSocket.getInputStream())); 

     BufferedReader stdIn = new BufferedReader(
      new InputStreamReader(System.in)); 

     String userInput; 

     while ((userInput = stdIn.readLine()) != null) 
     { 
     out.println(userInput); 

     } 

     out.close(); 
     in.close(); 
     stdIn.close(); 
     echoSocket.close(); 
    } 
    catch (UnknownHostException e) 
    { 
     System.err.println("Don't know about host: taranis"); 
    } 
    catch (IOException e) 
    { 
     System.err.println("Couldent get I/O for " 
      + " the connection to : taranis."); 
    } 

    } 
} 

Server代码:

public class ServerSide 
{ 

    ServerSocket connect; 
    Socket connection; 
    PrintWriter out; 
    BufferedReader in; 

    public void go() 
    { 

    try 
    { 
     connect = new ServerSocket(5000); 
     connection = connect.accept(); 
     in = new BufferedReader(
      new InputStreamReader(connection.getInputStream())); 

     String userInput; 

     while ((userInput = in.readLine()) != null) 
     { 
     System.out.println("echo: " + in.readLine()); 
     } 

    } 
    catch (IOException e) 
    { 
     System.out.println(e); 
    } 
    } 

    public static void main(String[] args) 
    { 
    new ServerSide().go(); 
    } 
} 

,我想在这里创建一个简单的connectio n在客户端和服务器之间。在客户端,当用户输入数据时,我希望它被发送到服务器,然后将它打印在服务器控制台上。看起来,我喜欢代码它不工作的方式是什么我做错了?

+0

定义 “不工作”。 – EJP

回答

0

首先,您需要声明一个控制台对象,然后在其上打印。
然后请不要忘记:
在服务器端的控制台上进行每次打印后,您需要刷新流,以便打印所有数据。

0

你的代码对我来说看起来很好。通常使用套接字和键盘输入,你会遇到reader.readLine()挂起的情况,因为它仍然试图从另一侧读取输入。通常,我会在客户端的末尾放置一个空的out.println(),以便服务器终止阅读while循环。我已经尝试过flush()之前,因为迈克建议,但这似乎不适用于我。

0

在客户端上,您在out.println之后缺少out.flush;

在服务器上,

while ((userInput = in.readLine()) != null) { 
     System.out.println("echo: " + userInput); // not in.readLine 
    }