Сервер не слушает запросы - PullRequest
0 голосов
/ 01 мая 2019

как часть моей домашней работы я должен построить два класса: один слушатель и один, который выполняет запросы к серверу (сервер уже написан моим учителем, и я не знаю, как выглядит код).Теоретически: сервер, к которому я подключен, должен отвечать точно такими же запросами, которые я ему отправил.Но на практике я ничего не получаю.

public class Listenerthread extends Thread {
    Socket s;
    Scanner answerServer;

    public Listenerthread(Socket socket) {
        this.s = socket;
        this.answerServer = new Scanner(new BufferedReader(new InputStreamReader(s.getInputStream())));
    }

    public void run() {
        System.out.println("Listening to the responses from the server......");
        while (true) {
            if (answerServer.hasNext()) {
                System.out.println(answerServer.nextLine());
            }
        }
    }
}
public class Mainthread {
    public static void main(String[] args) throws ParseException {
        Socket s = new Socket("someServer", 9999);
        Listenerthread server = new Listenerthread(s);
        server.start();
        if (s.isConnected()) {
            System.out.println("Connected");
        }
        String req = "Heyyy mate";  // server should sent me this back
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
        pw.println(req);
        pw.flush();
        //pw.close();
        //s.close(); 
    }
}

1 Ответ

0 голосов
/ 01 мая 2019

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


Если у вас есть модель клиент / сервер, вы должны использовать ServerSocket на стороне сервера, как вы упомянули в своем вопросе, но, похоже, не сделали этого в своем коде.

ServerSocket

Вот пример ServerSocket, который может это прояснить.

ServerSocket serverSocket;

public void serverSocketTest()
{
    serverSocket = new ServerSocket(9999);
    // each of the below methods will happen on separate threads
    new Thread(this::serverSideAcceptConnectionFromClient).start();
    new Thread(this::clientSideConnectToServer).start();
}

public void clientSideConnectToServer()
{
    try {
        System.out.println("Client is trying to connect to server...");
        Socket connectionToServer = new Socket("localhost", 9999);
        OutputStream thisGoesToTheServer = connectionToServer.getOutputStream();
        InputStream thisIsDataComingFromServer = connectionToServer.getInputStream();
        System.out.println("Client successfully connected to server.");
    } catch(IOException ex) {
        System.out.println("Connection to server failed. (" + ex + ")");
    }
}

public void serverSideAcceptConnectionFromClient()
{
    try {
        System.out.println("Server is listening for potential clients...");
        Socket connectionFromClient = serverSocket.accept();
        InputStream thisIsDataComingFromClient = connectionFromClient.getInputStream();
        OutputStream thisIsGoesBackOutToClient = connectionFromClient.getOutputStream();
        System.out.println("Server accepted a client");
    } catch(IOException ex) {
        System.out.println("Error while listening for clients. (" + ex + ")");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...