通过服务器将数据传递给客户端

时间:2018-05-01 09:15:27

标签: java

我正在尝试开发一个简单的解决方案,允许我通过服务器将数据从2个客户端传递给彼此。

我对Java很新,所以这对我来说非常棘手。我目前拥有的是一个与服务器建立连接的构造函数,服务器将在连接成功时进行回复(此时此作用)。

我的应用程序是一个GUI程序,所以我认为我最好的选择是将连接放入paintComponent,因为有一个计时器附加到此,所以希望计时器的每个滴答都将数据发送到服务器,但是这只会使程序崩溃。

最好的方法是什么 -

  • 从客户端向服务器发送数据
  • 在服务器上抓取数据
  • 将数据从服务器发送到另一个客户端

这是我的客观最终目标。

我的代码很基本,我真的不知道我的下一步是什么 -

客户 -

Socket clientSocket = null;
  DataOutputStream os = null;
  BufferedReader is = null;

  String request;
  String responseLine;
  String data;

  try {
     clientSocket = new Socket("LocalHost", 5000);
     os = new DataOutputStream(clientSocket.getOutputStream());
     is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  }  catch (UnknownHostException e) {
        System.err.println("Dont know host name!");
     }
     catch (IOException e) {
        System.err.println("Couldnt get I/O for connection");
     }

  if (clientSocket != null && os != null && is != null) {
     try {
        request = "Hello Server \n";
        os.writeBytes(request);
        System.out.println("Client: " + request);

        if((responseLine = is.readLine()) != null){
           System.out.println("SERVER: " + responseLine);
        }
        //os.close();
        //is.close();
        //clientSocket.close();
     }   
     catch (UnknownHostException e) {
        System.err.println("Trying to connect to unknown host: " + e);
     } catch (IOException e) {
        System.err.println("IOException: " + e);
     }
   }

服务器 -

ServerSocket service = null;
  Socket server = null;

  BufferedReader is;
  DataOutputStream os;

  String line;

  try {
     service = new ServerSocket(5000, 2);
  } catch (IOException e) {
     System.out.println(e);
    }

  try {
     server = service.accept();
     is = new BufferedReader(new InputStreamReader(server.getInputStream()));
     os = new DataOutputStream(server.getOutputStream());

     if( (line = is.readLine()) != null) {
     String text = is.toString();
     System.out.println("Data: " + text);
     }
     os.close();
     is.close();
     server.close();
  }
     catch (IOException e) {
        System.out.println(e);
     }   

1 个答案:

答案 0 :(得分:0)

  1. 您尚未为request分配任何内容。

  2. 如果你有,在你发布的代码之外,它不包含行终止符,所以你正在阅读行而不是写行。

  3. 您正在与读者和作家混合流。

  4. 您正在捕获异常,然后继续进行,就像它们没有发生一样。依赖于先前try块中代码成功的代码应位于同一try块内。

相关问题