Программирование сокетов, попытка подключения к серверу, замораживание приложения и вертушек - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь создать простое приложение чата в Java. Сейчас у меня проблемы с подключением к моему серверу. Всякий раз, когда я открываю чат, приложение останавливается, и моя мышь превращается в вертушку. окно сообщения не открывается, и закрытие программы на intellij - единственный способ остановить его.

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

Клиентская сторона:

public class MessagingSupport {

public MessagingSupport(MainController mainController) {
    this.mainController = mainController;

//        SupportSideMessagingSupport supportSideMessagingSupport = new SupportSideMessagingSupport();
// thought this might be causing the issue but it freezes whether this 
// is commented out
    connect();

}
private void connect(){
    SupportSideMessagingSupport supportSideMessagingSupport = new SupportSideMessagingSupport();
// commenting this out gets a java.net.ConnectException: Connection refused (Connection refused) error
    try{
        Socket socket = new Socket("localhost", 56515);
        System.out.println("listening on port: " + socket.getLocalPort());
        DataInputStream dis = new DataInputStream(socket.getInputStream());
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

        while(true){
            Scanner sc = new Scanner(System.in);
            System.out.println("Client: ");
            String message = sc.nextLine();
            dos.writeUTF(message);

            String res = dis.readUTF();
            System.out.println("Server said: " + res);
            if (res.equals("bye")){
                break;
            }
        }
    } catch (IOException ex){
        ex.printStackTrace();
    }
}

Серверная сторона

public class SupportSideMessagingSupport {

public SupportSideMessagingSupport(){
    connectToServer();
}
private void connectToServer(){
    try {
        ServerSocket serverSocket = new ServerSocket(56515);
        Socket socket = serverSocket.accept();
        System.out.println("connected");
        DataInputStream dis = new DataInputStream(socket.getInputStream());
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

        while (true) {

            String res = dis.readUTF();
            System.out.println("Client said: " + res);
            if (res.equals("bye")) {
                break;
            }
        }
        Scanner sc = new Scanner(System.in);
        System.out.println("Server: ");
        String message = sc.nextLine();
        dos.writeUTF(message);
    } catch(IOException e){
        e.printStackTrace();
    }
}

Итак, приведенный выше код вызывает зависание приложения. Вместо этого он должен открыть чат в журнале консоли. Спасибо за помощь!

...