Server-Client这里有什么问题?

时间:2016-03-13 18:18:27

标签: java multithreading server client

所以这是我尝试'设置'的第一个服务器客户端,但它不能按我的意愿工作。这就是我想要的:

客户要执行的操作:(请参阅客户代码中的注释)

  1. 客户
  2. 应阅读“用户输入”
  3. 将“用户输入”发送到服务器
  4. 从服务器接收内容
  5. 要执行的服务器:(请参阅服务器代码中的注释)

    1. 接收客户端读取的“用户输入”
    2. 使用'用户输入'
    3. 执行某些操作
    4. 将(2)中完成的内容发送回客户端。
    5. 它无法正常工作它接收来自'用户'的输入,就是它:

      public class Cli {
      
          BufferedReader in;
          PrintWriter out;
          Socket s; 
          public Cli(int port){
              try {
                  s = new Socket("127.0.0.1", port);
                  out = new PrintWriter(s.getOutputStream(), true);
                  in = new BufferedReader(new InputStreamReader
                          (s.getInputStream()));
              } catch (UnknownHostException e) {
                  System.out.print("fel");
              } catch (IOException e) {
                  System.out.print("fel");
              }
          } 
      
          public void startaClient(){
                  BufferedReader stdIn = new BufferedReader (new InputStreamReader(System.in));
      
              try {
                  while(true){
                      String userInput = stdIn.readLine();// get the user input (1)
                      System.out.print("from user: " + userInput);
                      out.write(userInput); // sends to server (2)
                      System.out.println(in.readLine()); // receive from server(3)
                  }
              } catch (Exception e){
                  System.out.println("fel1");
              } 
          }
      
          public static void main(String[] args){
              Cli c=new Cli(4002);
              c.startaClient();
          }
      

      以下是服务器的代码:

      public class Ser {
          ServerSocket s;
      
          public Ser()throws  Exception{
              s = new ServerSocket(4002);
          }
      
          public void startaServern()throws Exception {
              while (true) {
                  Socket socket = s.accept(); //waits for new clients, acceptera inkommande förfrågan
                  Trad t = new Trad(socket);
                  t.start();
              }
          }
      
          public static void main(String[] args)throws Exception{
              Ser b = new Ser();
              b.startaServern();
          }
      }
      
      public class Trad extends Thread {
          Socket socket;
          BufferedReader in;
          PrintWriter out;
      
          public Trad(Socket s){
              socket=s;
              try{
                  in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 
                  out=new PrintWriter(socket.getOutputStream(),true); 
              }catch(Exception e){System.out.println("fel");}
          }
      
      
          public void run(){
              while(true){
                  try{
                      String theInput  = in.readLine(); //read, receive message from client (1)
                      String res  =  theInput+"blabla";    // do something with the message from the client (2)
                      out.write(res); // send it back to the client (3)
      
                  } catch(Exception e) {
                      System.out.println("fel1");
                  }
              }
          }
      }
      

1 个答案:

答案 0 :(得分:1)

执行readLine()时,它会读取一行,即直到它到达新行。

除非您发送新行,否则它将永远等待。我建议您发送换行符,以便读者知道该行已经结束。

由于您使用的是PrintWriter,因此最简单的解决方案是使用

out.println(res);

而不是out.write(res);