0 / 0 / 0
Регистрация: 11.09.2018
Сообщений: 15
1

Клиент не может подключиться к серверу

29.11.2019, 13:18. Показов 1192. Ответов 7

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Делая задания по серверам, столкнулся с проблемой, что клиент не может подключиться к серверу. Несколько раз перечитал документацию и всё вроде как должно быть в порядке.
Вот код серверной части:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class ServerMain {
 
    public static void main(String[] args) {
        try {
            System.out.println(InetAddress.getLocalHost().getHostAddress());
        } catch (UnknownHostException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace(); //Исключение
        }
 
        newGameTable();
        //Сейчас нам необходимо выяснить, что с сервером кто-то хочет связаться. Для этого используе метод accept(); ожидаем подключения и в итоге возвращаем объект типа socket
        try (ServerSocket servSocket = new ServerSocket(Protocol.PORT)) {
            System.out.println("initialized...");
            new ServerStopThread().start();
            while (true) {
                Socket socket = accept(servSocket);
                if ( socket != null ) {
                    System.err.println(socket.getInetAddress().getHostName() + " connected");
                    new ServerThread(socket).start();
                }
                if ( ServerMain.getStopFlag() )
                    break;
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            stopAllUsers();
            System.err.println("stopped");
        }
 
    }
Вот код клиентской:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class ClientMain {
 
    static Object syncObj = new Object();
    static Scanner in = new Scanner(System.in);
 
    public static void main(String[] args) throws IOException {
 
        System.out.println("Здравствуйте. Введите ваш логин для подключения к серверу:");
        String name = in.nextLine();
        System.out.println("Введите ip-адрес сервера:");
        String ip = in.nextLine();
 
        try {//тип InetAddres
            ClientInfo client = new ClientInfo(name, new Socket(InetAddress.getByName(ip), Protocol.PORT));//host name; если не сможем получить генер искл
            client.oos.writeObject(new MessageConnect(name));
            while (true) {
 
                MessageResult msg = null;
                try {
                    msg = (MessageResult) client.ois.readObject();
                }
                catch (Exception e) { }
                if ( msg != null ) {
                    switch (msg.getID()) {
                        case Protocol.CMD_CONNECT:
                            if ( !client.connecting((MessageConnectResult)msg) )
                                return;
                            break;
                        case Protocol.CMD_CHECK_GAME:
                            if ( !client.checkGame((MessageCheckGameResult)msg) )
                                return;
                            break;
                        case Protocol.CMD_MOVE:
                            if ( !client.afterMove((MessageMoveResult)msg) )
                                return;
                            break;
                    }
                }
            }
        }
        catch (IOException e) {
            System.err.println("Disconnect...");
        }
        finally {
            in.close();
            System.out.println("\nПользователь отключен от сервера.");
        }
 
    }
Всегда выдаёт, что пользователь отключен от сервера
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2019, 13:18
Ответы с готовыми решениями:

Подключиться к серверу и выполнить сценарии
Здравствуйте! Возникла задача подключиться к серверу и выполнить определенный скрипт методом...

WinSock клиент не может подключиться к серверу
Есть Сервер: //--------------------------------------------------------------------------- ...

TcpChannel клиент не может подключиться к серверу
у меня проблема есть клиент: namespace Client { public partial class Form1 : Form { ...

Программа не может подключиться к серверу
Данная прога должна открывать множество соединений на порт 80 с указанным хостом по полученному от...

7
406 / 278 / 93
Регистрация: 14.03.2017
Сообщений: 777
29.11.2019, 14:28 2
Alex9998, и как мне проверить этот код?
Приложите только минимально отображающий проблему код, без собственных классов.
0
0 / 0 / 0
Регистрация: 11.09.2018
Сообщений: 15
29.11.2019, 16:21  [ТС] 3
Сервер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
try {
            System.out.println(InetAddress.getLocalHost().getHostAddress());
        } catch (UnknownHostException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace(); 
        }
 
        newGameTable();
        try (ServerSocket servSocket = new ServerSocket(Protocol.PORT)) {
            System.out.println("initialized...");
            new ServerStopThread().start();
            while (true) {
                Socket socket = accept(servSocket);
                if ( socket != null ) {
                    System.err.println(socket.getInetAddress().getHostName() + " connected");
                    new ServerThread(socket).start();
                }
                if ( ServerMain.getStopFlag() )
                    break;
            }
    
        }
Клиент:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
try {
            ClientInfo client = new ClientInfo(name, new Socket(InetAddress.getByName(ip), Protocol.PORT));
            client.oos.writeObject(new MessageConnect(name));
            while (true) {
 
                MessageResult msg = null;
                try {
                    msg = (MessageResult) client.ois.readObject();
                }
                catch (Exception e) { }
                if ( msg != null ) {
                    switch (msg.getID()) {
                        case Protocol.CMD_CONNECT:
                            if ( !client.connecting((MessageConnectResult)msg) )
                                return;
                            break;
                        case Protocol.CMD_CHECK_GAME:
                            if ( !client.checkGame((MessageCheckGameResult)msg) )
                                return;
                            break;
                        case Protocol.CMD_MOVE:
                            if ( !client.afterMove((MessageMoveResult)msg) )
                                return;
                            break;
                    }
                }
            }
        }
        catch (IOException e) {
            System.err.println("Disconnect...");
        }
        finally {
            in.close();
            System.out.println("\nПользователь отключен от сервера.");
        }
 
    }
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
29.11.2019, 16:29 4
дебаггер включай и смотри, в какой момент вырубается
сервер надо запускать перед клиентом
если запускаешь с разных компов - надо проверить, что компы друг друга видят (ping), что порт, на котором слушает сервер, торчит наружу (netstat, nmap), отключить файрволы и т.д.
Цитата Сообщение от Alex9998 Посмотреть сообщение
catch (IOException e) {
            System.err.println("Disconnect...");
        }
e.printStackTrace, не?
0
0 / 0 / 0
Регистрация: 11.09.2018
Сообщений: 15
29.11.2019, 16:34  [ТС] 5
Вырубается на этом моменте:
Java
1
ClientInfo client = new ClientInfo(name, new Socket(InetAddress.getByName(ip), Protocol.PORT));
А каким образом проверять видят ли компы друг друга?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
29.11.2019, 16:38 6
ping я же написал

Добавлено через 34 секунды
вообще неплохо бы минимальные познания о сетях иметь, раз сокеты пишешь
0
406 / 278 / 93
Регистрация: 14.03.2017
Сообщений: 777
29.11.2019, 17:33 7
Цитата Сообщение от Alex9998 Посмотреть сообщение
Клиент:
Огонь , я ведь могу свободно в интернете найти документацию о классе ClientInfo. Что в нем происходит при создании нового экземпляра класса.
0
0 / 0 / 0
Регистрация: 11.09.2018
Сообщений: 15
29.11.2019, 18:44  [ТС] 8
ClientInfo:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Socket socket;
    ObjectOutputStream oos;
    ObjectInputStream ois;
    InetAddress address;
    String userNic;
    Icon icon;
 
    public ClientInfo (String name, Socket s) throws IOException {
        userNic = name;
        socket = s;
        oos = new ObjectOutputStream(socket.getOutputStream());
        ois = new ObjectInputStream(socket.getInputStream());
        address = socket.getInetAddress();
    }
0
29.11.2019, 18:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2019, 18:44
Помогаю со студенческими работами здесь

Counter-Strike не может подключиться к серверу
установил Counter Strike 1.6 2010 by ARHANGEL.exe. хочу заитти в сервак, незаходит! даже список...

Как узнать пароль VPN с которым клиент пытается подключиться к серверу
Всем привет! Ситуация такая: на VPN-сервере микротика было настроено подключение. Удаленный клиент...

Клиентское приложение не может подключиться к серверу на vps Ubuntu 14.04
Здравствуйте! Существует клиент-серверное приложение, нормально работающее на localhost, но...

Не могу подключиться к серверу по FTP ошибка Превышено время ожидания соединения, Ошибка:Невозможно подключиться к серверу
Всем доброго настроения! ПЫтался подключиться через две программы с разных компов (точнее компа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru