Клиентский сокет не получает строку - PullRequest
0 голосов
/ 25 ноября 2011

Я создал простую программу сокета клиент-сервер и отправил строку a | b | c | *, а клиент не получил ее. Клиент находится на другом компьютере.

Код сервера.

String format = "a|b|c|*";
ServerSocket ss = new ServerSocket(2222);
System.out.println("Server Started.");

while (true) {              
    Socket s = ss.accept();
    System.out.println("Connection accepted.");
    InputStream is = s.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    PrintStream ps = new PrintStream(s.getOutputStream());
    ps.println(format);             
    ps.flush();
    System.out.println("Format sent.");
}    

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

try {
    Socket s = new Socket("192.168.0.71", 2222);
    // step 3: Get I/O streams
    InputStream is = s.getInputStream();
    InputStreamReader isr= new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);

    String format = br.readLine();
    System.out.println(format);
} catch(Exception ex){
    System.out.println(ex.getMessage());
}

Когда я создаю клиента на том же компьютере, он получает строку, а когда я передаю эту строку клиенту другого компьютера, он не получает его.

1 Ответ

0 голосов
/ 25 ноября 2011

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

  1. Подразумевается, что вы смогли локально подключиться к серверу и посмотреть,строка формата.Хорошо.Вы также можете использовать telnet с удаленного клиента на сервер и также увидеть строку формата?

  2. Если удаленный telnet не работает, то я 'd проверьте, есть ли брандмауэр или иным образом проблема маршрутизации.Можете ли вы пропинговать сервер с клиента?

  3. Еще одна причина, по которой telnet может не работать, заключается в том, что ваш сервер связан с неверным портом.По умолчанию это привязка ко всем интерфейсам, но чтобы быть уверенным, вы должны проверить.Если вы используете Unix Box или OSX, вы можете использовать команду netstat, чтобы увидеть, к каким портам вы привязываетесь.В следующем выводе показано, что сервер связан с *, что означает все интерфейсы.

    $ netstat -an | grep 2222     
    tcp46      0      0  *.2222                 *.*                    LISTEN
    
  4. Если больше ничего не помогает, то поймите, что если у вас подключен telnet, он заблокируетвсе другие telnet и клиенты от подключения, так как вы не закрываете сокет на сервере.

Надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...