не удается подключить клиент к серверу в java

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

Спасибо.

фрагмент кода от клиента:

serverIP = String.valueOf(InetAddress.getLocalHost().getHostAddress());
int Port = 5000;

.
.
.
try 
            {
                sock = new Socket(serverIP, Port);
                InputStreamReader streamreader = new InputStreamReader(sock.getInputStream());
                reader = new BufferedReader(streamreader);
                writer = new PrintWriter(sock.getOutputStream());
                writer.println(username +":"+ encPassword+":has connected"+":Connect"); // Displays to everyone that user connected.
                writer.flush(); // flushes the buffer
                isConnected = true; // Used to see if the client is connected.
            }
            catch (Exception ex) 
            {
                chatTextArea.append("Cannot Connect! Try Again. \n");
                System.err.println(ex.getMessage());
                usernameField.setEditable(true);
                pass.setEditable(true);
            }
        ListenThread();
.
.
.

public void ListenThread() 
{
     Thread IncomingReader = new Thread(new IncomingReader());
     IncomingReader.start();
}

фрагмент кода с сервера:

public void run() 
    {
        clientOutputStreams = new ArrayList();
        onlineUsers = new ArrayList();  
        try 
        {
            ServerSocket serverSock = new ServerSocket(5000);
        while (true) 
            {
                // set up the server writer function and then begin at the same
                // the listener using the Runnable and Thread
                Socket clientSock = serverSock.accept();
                PrintWriter writer = new PrintWriter(clientSock.getOutputStream());
                clientOutputStreams.add(writer);
                // use a Runnable to start a 'second main method that will run
                // the listener
                Thread listener = new Thread(new ClientHandler(clientSock, writer));
                listener.start();
                outputPane.append("Got a connection. \n");
    } // end while
        } // end try
        catch (Exception ex)
        {
            outputPane.append("Error making a connection. \n");
        } // end catch
}

person Akshay Agarwal    schedule 10.12.2014    source источник
comment
«он не подключается к серверу» обычно означает, что вы должны получить исключение, которое должно дать вам приблизительное представление о том, почему он не может подключиться.   -  person Mr. L    schedule 10.12.2014
comment
Я получаю отказ в соединении.   -  person Akshay Agarwal    schedule 11.12.2014


Ответы (1)


Я думаю, ваша проблема в том, что клиент все еще пытается подключиться к машине, на которой он работает:

serverIP = String.valueOf(InetAddress.getLocalHost().getHostAddress());

serverIP должно получить значение удаленной машины (желательно с использованием какой-либо конфигурации)..

person Ronny Shapiro    schedule 10.12.2014
comment
@AkshayAgarwal Попробуйте serverIP = 'IP-адрес сервера, к которому вы пытаетесь подключиться' - person Mr. L; 11.12.2014
comment
Клиентской машине нужен адрес серверной машины (ip). Этот адрес необходимо присвоить переменной serverIp. Вы можете получить информацию о сети на сервере с помощью команды ipconfig (windows) \ ifconfig (unix\linux). - person Ronny Shapiro; 11.12.2014
comment
Что делать, если IP-адрес сервера постоянно меняется? есть ли какой-либо динамический способ получить IP-адрес сервера и использовать его вместо того, чтобы заранее жестко кодировать обслуживающий IP-адрес. - person Akshay Agarwal; 11.12.2014
comment
Вы можете развернуть свой код сервера на некоторых бесплатных решениях для хостинга, которые предоставляют вам временный домен (например, heroku или google). Когда ваше приложение готово к производству и работает в больших масштабах, вы, скорее всего, захотите подключиться к балансировщику нагрузки. - person Ronny Shapiro; 11.12.2014
comment
так что в конце концов мне придется предоставить ему жестко запрограммированный IP-адрес сервера. Спасибо, ребята, за быстрые и информативные ответы и предложения. Думаю, я наконец смогу заставить его работать. - person Akshay Agarwal; 11.12.2014