首页 > 解决方案 > 我想从服务器读取和写入,但不是同时

问题描述

我有一个服务器类,它有一个使用 while(true) 来保持服务器运行的主要方法。我有在 while 循环中读取和写入数据的代码。我有一个客户端类,它有 3 个方法,第一个读取数据,第二个和第三个写入数据。我有另一个名为显示控制器的类,它根据我们在应用程序中执行的操作调用客户端类中的方法。

public class Server {
public static void main(String[] args) throws IOException {
  ServerSocket serverSocket = new ServerSocket(666);
    FileReader fileReader = new FileReader("MYJSON.json");
    BufferedReader buff = new BufferedReader(fileReader);
    while (true) {
      Socket socket = serverSocket.accept();

  /*   InputStreamReader inputStreamReader = new 
      InputStreamReader(socket.getInputStream());
      BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
      String str = bufferedReader.readLine();
      writeJson(str); */

      String str;
      OutputStreamWriter outputStreamWriter = new
      OutputStreamWriter(socket.getOutputStream());
      PrintWriter printWriter = new PrintWriter(outputStreamWriter);
      str = buff.readLine();
      printWriter.write(str);
      printWriter.flush();
      printWriter.close();

      InputStreamReader inputStreamReader = new 
      InputStreamReader(socket.getInputStream());
      BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
      String str1 = bufferedReader.readLine();
      if (str1.equals("createNewJson")) {
        fileReader = new FileReader("MYJSON.json");
      }

    }
  }

import java.io.*;

    import java.net.Socket;

    public class Client{

    public static String readDataFromServer() throws IOException{
    Socket socket = new Socket("localhost",666);
    InputStreamReader inputStreamReader = new 
    InputStreamReader(socket.getInputStream());
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    System.out.println();
    String str = bufferedReader.readLine();
    System.out.println(str);
    return str;

    }

    public static void createNewJsonFile() throws IOException {
      Socket socket = new Socket("localhost",666);
      OutputStreamWriter outputStreamWriter = new 
      OutputStreamWriter(socket.getOutputStream());
      PrintWriter printWriter = new PrintWriter(outputStreamWriter);
      printWriter.write("CreateNewJson");
    }

      public static void writeDataToServer(String str) throws IOException {
       Socket socket = new Socket("localhost",666);

        OutputStreamWriter outputStreamWriter = new 
        OutputStreamWriter(socket.getOutputStream());
        PrintWriter printWriter = new PrintWriter(outputStreamWriter);
        printWriter.write(str);
        printWriter.flush();
        printWriter.close();

        }


    }

问题是当在客户端类中调用 read 方法时,服务器正在执行 while 循环中的代码以将数据发送到服务器,但它也执行从客户端读取数据的代码但客户端没有发送不会调用客户端类中作为写入方法的任何数据。我不想要它。因此,当它执行代码以读取数据时,我收到连接重置错误。我知道这是因为我的服务器在 while 循环中不必要地执行了读取数据的代码行,即使客户端没有向服务器发送任何数据来读取。无论如何我可以解决这个问题吗?

标签: javasockets

解决方案


推荐阅读