2012-04-13 5 views
0

Прежде чем отвечать, обратите внимание, что это проблема на стороне клиента, а не проблема с сервером. Поскольку я использовал telnet в терминале, чтобы подключиться к серверу, и telnet смог подключиться к серверу. Теперь я не знаю, почему метод подключения не может подключиться. Я использовал как адрес localhost, так и частный IP-адрес сервера. Он просто блокирует и никогда не вызывает метод обратного вызова.Блоки метода Java Socket Когда «connect» называется

   client.connect(new InetSocketAddress(hostname, 1993)); 
       callback.onConnection(); // Never invokes! 
       OutputStream writer = client.getOutputStream(); 
       InputStream reader = client.getInputStream(); 
       byte[] buffer = new byte[1024 * 1024]; 

P.S Я делаю что-то неправильно. Это не может быть проблемой межсетевого экрана, поскольку telnet смог подключиться к серверу, и я думаю, что у меня нет брандмауэра, так как я запускаю этот код на своей машине Ubuntu. И сервер, и клиент используют протокол TCP, и никакое исключение не выбрасывается ни на стороне клиента, ни на стороне сервера. Любое предложение о том, что может быть неправильным, может быть очень полезным. Я могу показать больше кода, например, код sever. Сервер написан на C++, а клиент написан на Java.

Edit:

я, наконец, смог установить соединение. Вместо использования метода connect, который я вызываю через соединение, используя конструктор сокета. Я не знаю, почему соединение не работает?

Вот модификация коды:

  client = new Socket(hostname, port); 
      callback.onConnection(); 
      OutputStream writer = client.getOutputStream(); 
      InputStream reader = client.getInputStream(); 
      byte[] buffer = new byte[1024 * 1024]; 
      reader.read(buffer); 
+0

Предложение: получить копию Wireshark и проследить, что происходит в 3-этапного: http://www.wireshark.org – paulsm4

+0

Что такое 'callback'? – biziclop

ответ

0

Я, наконец, смог установить соединение. Вместо использования метода connect, который я вызываю через соединение, используя конструктор сокета. Я не знаю, почему соединение не работает?

Вот модификация кода:

 client = new Socket(hostname, port); 
     callback.onConnection(); 
     OutputStream writer = client.getOutputStream(); 
     InputStream reader = client.getInputStream(); 
     byte[] buffer = new byte[1024 * 1024]; 
     reader.read(buffer); 
1

Я полагаю, вы используете блокирующие сокеты так, connect метода блокирует выполнение, пока соединение не будет установлено. Вы можете попытаться создать неблокирующие сокеты, используя http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/channels/SocketChannel.html например

+0

Я решил это, используя конструктор, чтобы выполнить соединение как новый Socket (имя хоста, порт); –

1

Вы пробовали проверить isUnresolved() по адресу перед вызовом connect?

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