2013-10-01 187 views
1

书面形式向客户端套接字所以我想创建一个简单的服务器客户端程序,其中多个客户端可以连接到一台服务器的麻烦。我在客户端和服务器端运行线程。我有一个文件“loginuser.txt”,它有5行文本。这段代码是服务器线程。当我调用outToClient.println(“xxx”)或其他任何东西时,客户端一次不会收到超过一行的内容。每次用户在键盘上输入任何内容(在客户端上)时,文件的下一行都显示在同一个终端上。有人能告诉我为什么会发生这种情况吗?我哪里错了? 基本问题:对于从服务器到客户端的单行println(),似乎我必须每次在客户端输入一些内容。客户套接字编程在Java中 - 从服务器端

BufferedReader inFromUser=new BufferedReader(new InputStreamReader(System.in)); 
BufferedReader inFromClient=new BufferedReader(new InputStreamReader(client.getInputStream())); 
BufferedReader userlogr=new BufferedReader(new FileReader("loginuser.txt")); 
PrintWriter outToClient = new PrintWriter(client.getOutputStream(), true); 
if(check==1) 
    { 
     fromclient=inFromClient.readLine(); 
     if(fromclient.compareTo("xxx")==0) 
     { 
      String line; 
      while((line=userlogr.readLine())!=null) 
      { 
       System.out.println(line); 
       outToClient.println(line); 
       outToClient.flush(); 
      } 

     } 
    } 
+2

听起来就像是客户端的问题。它处于暂停输入的循环中,并且只有一个线程处理用户输入和从服务器接收数据。编辑您的帖子并显示客户端代码。 –

+0

听起来像一个协议问题(你的协议)。我的猜测是,客户端只为它发送的每一行读取一行。如果你想在一个响应中发送多行,你需要有其他方式来知道你什么时候收到完整的消息。 –

+0

你可以显示相应的客户端代码吗? – Fildor

回答

0

我以前有过这个问题。通常有三件事

1.)同时检查发送的字符串“\ n”最后。使用\ n和println会弄乱回车,因为它会加倍。删除任何额外的“\ n”并尝试它(这很可能是您的情况中的问题)

2.)客户端确实没有一个while循环来输出传递的整个数据。您正逐行发送数据。收到数据后检查客户端是否自行关闭。

3)在客户端检查线程。我不知道你的客户端线程是如何工作的,但我曾经被其他线程阻塞。