2015-11-01 2 views
1

В этой чрезвычайно простой клиентской/серверной программе сокетов почему мой клиентский сокет никогда не подключается и не бросает java.net.ConnectException? Я запускаю программу MessageServer на одном компьютере и программу ClientServer на другом ноутбуке в той же сети. Я проверил, что local-ip компьютера, на котором запущена серверная программа, 10.0.0.1, используя команду ipconfig в Windows cmd на этом компьютере.Почему мой клиент Socket не подключается к моему серверу?

Сервер:

package server; 

import java.net.*; 
import java.io.*; 

public class MessageServer { 

    public static void main(String args[]) { 
     ServerSocket serverSocket = null; 

     try { 
      serverSocket = new ServerSocket(4302); 
     } 
     catch (Exception e) { 
      System.out.println("well bad news..."); 
     } 

     boolean noConnection = true; 
     while(noConnection == true) { 
      try { 
       Socket client = serverSocket.accept(); 
       System.out.println("socket connection accepted:" + client.getRemoteSocketAddress().toString()); 
       noConnection = false; 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       System.out.println("fail"); 
      } 

    } 
    } 
} 

Клиент:

import java.net.*; 
import java.io.*; 

    public class MessageClient { 
     public static void main(String args[]) { 
      Socket clientSocket = null; 
      String recieve; 
      try { 
       clientSocket = new Socket("10.0.0.1", 4302); 
      } catch (Exception e) { 
       System.out.println("deal with it..."); 
       e.printStackTrace(); 
      } 


     } 
    } 

Когда я бегу эти 2 программы, я получаю следующий результат на клиентской машине:

java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at MessageClient.main(MessageClient.java:10) 

Нет проблем с сервер.

EDIT: Я попытался отключить мою защиту в Интернете (Norton 360), не помог. Кроме того, я бегу (на обоих компьютерах) Windows 10, Java 8 Update 65, Eclipse IDE Марс 1

EDIT 2: В случае помогает, я попытался запустить обе части программы на одном компьютере, это работает. Все признаки указывают на проблему с брандмауэром Windows. Я постараюсь сделать это как можно скорее.

+0

Скорее всего, причина: брандмауэр Windows. –

+0

@ HarryJohnston удивляет, окна Microsoft меня заворачивают. О, подождите, неважно. = \. –

ответ

0

Хорошо, поэтому я, наконец, решил эту проблему. Просто поместите этот ответ там для тех, кто сталкивается с той же проблемой. При создании клиентского сокета вам необходимо напрямую указать локальный ipv4 устройства. По какой-то причине локальный хост не позволит ему подключиться и говорит, что соединение отказывается от подключения к локальной сети. Так EX Код:

Socket client = new Socket("10.0.0.8", 5566); 

вместо:

Socket client = new Socket("localhost" 5566); 

Если вы ищете ipv4, идти на сервере, откройте CMD (Windows) и введите ipconfig. Затем под Ethernet adapter Local Area Connection: используйте адрес, указанный в адресе IPv4.

0

Не имеет значения, что такое локальный ip вашего компьютера. Сервер работает на локальном хосте и, следовательно, вам нужно подключиться к localhost.

Изменить это

clientSocket = new Socket("10.0.0.1", 4302); 

в

clientSocket = new Socket("localhost", 4302); 

При размещении вашего сервера на VPS, то вы можете изменить Localhost к IP на VPS.

Вы также можете использовать «127.0.0.1» вместо «localhost».

EDIT Согласно за исключением вы получаете сейчас,

Исключением происходит, когда сервер не прослушивает порт, который вы пытаетесь подключиться.

Либо вы еще не запустили свой сервер, либо сервер не принимает соединения или номера портов на клиенте и сервере разные.

EDIT 2

Поскольку вы работаете клиент и сервер на (предполагается, что различные сети) различных ПК вам нужно порт вперед ваш маршрутизатор, чтобы принимать соединения.

Подробнее о переадресации порта here

Кроме того, вы можете использовать этот веб-сайт для помощи Вам с перенаправлением портов. Port Forwarding

+0

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

+0

Добавить \t e.printStackTrace(); перед тем, как вы распечатываете систему на сервере, в которой говорится о плохих новостях, чтобы проверить, уже ли используется порт. Возможно, вы уже используете порт 4302. Программа работает отлично для меня. – Sneh

+0

видеть сообщение, я добавил ошибки, которые я получаю. –