Как правильно использовать потоки ввода / вывода? Server / Client / Потоки - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь написать программу, в которой Клиент отправляет строку на Сервер, используя поток вывода. Сервер видит, какая это строка, сравнивает ее с условной, а затем отправляет ее обратно клиенту и отображает сообщение на стороне клиента. Я хотел бы понять, как это работает, и что не так с моим кодом до сих пор. Как только я получу его, я реализую его с помощью JavaFX.

Клиент

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;


public class MyClient {

    static Socket socket;
    static int clientNo;
    static DataOutputStream toServer;
    static DataInputStream fromServer;

    public static void main(String[] args) {
        try{
            socket = new Socket("localhost", 8888);
            System.out.println("Client connected to the server");

            fromServer = new DataInputStream(socket.getInputStream());
            toServer = new DataOutputStream(socket.getOutputStream());

            toServer.writeBytes("listAll");
            toServer.flush();
            System.out.println("Sending string to the ServerSocket");

            } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }  
    }

}

Сервер

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;



public class MyServer {

    static final int PORT = 8888;

    static ServerSocket serverSocket;
    static Socket socket;

    public static void main(String[] args) {
            try {
                serverSocket = new ServerSocket(PORT);
                System.out.println("Server started at " + new Date());
                System.out.println("Server on PORT: " + PORT + " is open");
                System.out.println("Server is ready for multiple clients!");
                System.out.println("Waiting for request...");
                while(true){
                    socket = MyServer.serverSocket.accept();
                    new Thread(new HandleClient(MyClient.socket)).start();
                }

            } catch (IOException ex) {
            System.err.println("Server Error: " + ex.getMessage());

            }
    }
}

Тема

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class HandleClient implements Runnable {

    private Socket socket;
    public static int clientNo = 1;
    public static int condition;

    static DataInputStream input ;
    static DataOutputStream output;
    static String message;

    public HandleClient(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        switch (condition) {
            case 1:
                break;
            case 2:
                System.out.println("list all");
                break;
            case 3:
                break;
            default:
                System.out.println("Client #" + clientNo + " connected!");
                clientNo++;
                try {

                    input = new DataInputStream(socket.getInputStream());
                    output = new DataOutputStream(socket.getOutputStream());

                        message = input.readUTF();
                        System.out.println(message);


                        if("listAll".equals(message)){
                            HandleClient.condition = 2;
                            new Thread(new HandleClient(socket)).start();
                        } 
                } catch (IOException ex) {
                    System.err.println("One of the clients disconnected");
            }
                break;
        }
    }
}

Я очень ценю любая помощь! Я понимаю, что у меня может отсутствовать код для отправки ответа клиенту? Пожалуйста, дайте мне знать, если направление, в котором я иду, хорошее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...