2012-01-22 2 views
0

У меня есть немного server.jar, которые слушают GET и команду END на порт 10000.Java, клиент-сервер связи

Мой клиент код:

package communication; 

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

public class Client { 

public static void main(String args[]) throws Exception { 
    try { 

      Socket socket = null; 
      PrintWriter out = null; 
      BufferedReader in = null; 

      socket = new Socket("localhost",10000); 
      System.out.println("SOCKET = " + socket); 
      System.out.print(socket.getInetAddress() + "\n"); 
      System.out.print(socket.getInputStream() + "\n"); 
      System.out.println(socket.isConnected() + "\n"); 

      out = new PrintWriter(socket.getOutputStream(),true); 

      in = new BufferedReader(new 
          InputStreamReader(socket.getInputStream())); 

      String str = "GET"; 
      out.println(str); 
      String reponse = in.readLine(); 
      System.out.println(socket.isConnected() + "\n"); 
      for(int i = 0; i < 10; i++){ 
        out.println(str);   // envoi d'un message 
        reponse = in.readLine();  // lecture de la reponse 
        System.out.println("Forme recue: " + reponse); 
      } 
      System.out.println("END");  // message de terminaison 
      out.println("END") ; 
      in.close(); 
      out.close(); 
      socket.close(); 

    } 
    catch(IOException e) { 
      System.out.println(e.getCause()); 
    } 
} 
} 

Я знаю, что этот код работает, потому что он работает на одном из моих компьютеров. Однако я не могу заставить его работать на другом. Конфигурации на обоих: Windows 7 64, JRE 6, Eclipse.

Приложение server.jar открывает небольшое GUI, которое позволяет мне знать, что сообщение открыто или нет, что никогда не случается на компьютере, который btw застревает в строке readLine().

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

Кто-нибудь знает, что здесь не так?

спасибо !!

+0

Нам нужна дополнительная информация, чтобы помочь вам. Какие ошибки вы получаете? что такое поведение и т. д. –

+0

Я не получаю никаких ошибок, программа просто застревает в строке String reponse = in.readLine(); В моем случае это на самом деле отсутствие поведения, которое меня беспокоит;) – CTZStef

+0

Что вы хотите точно проверить? Почему у вас нет SocketServer, если вы хотите общаться с сервером и клиентом? –

ответ

0

Я смотрю на строку localhost, и у вас есть подозрение, что может быть проблемой.

В ответе от этого post, там может быть что-то с :: localhost, который должен быть прокомментирован, а также жестким кодирование локального как 127.0.0.1 в вашем C: \ Windows \ System32 \ Drivers \ и т.д. \ hosts файл.

С помощью жесткого кодирования localhost с определенным IP-адресом сервер будет прослушивать тот же localhost, что и ваша клиентская программа.

+0

Интересно, я попробую сегодня вечером, я буду держать вас в курсе. Благодаря!! – CTZStef

0

Первое, что нужно попробовать - добавить out.flush() сразу после вашего out.println.

+0

Я просто попробовал это, ничего, все еще застрял в readLine(). И я сильно сомневаюсь, что мне нужно изменить код, так как он работает на другом компьютере ... это должно быть что-то еще ... Я думаю :) – CTZStef

+0

Одна вещь, о которой я не упоминал, System.out.println (socket. isConnected() + "\ n"); return true. – CTZStef

+0

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

Смежные вопросы