2013-04-11 2 views
0

Я посылаю сообщение через DatagramChannel следующим образом:Отправка сообщения через DatagramChannel

ByteBuffer buf = ByteBuffer.allocate(48); 
buf.clear(); 
String request_message = "request"; 
buf.put(request_message.getBytes()); 
buf.flip(); 

int bytesSent = udpserver.send(buf, successor_port_1); // udpserver is a DatagramChannel 

Затем я прочитал сообщение на сервере:

ByteBuffer buf = ByteBuffer.allocate(48); 
buf.clear(); 

String message = new String(buf.array(), Charset.forName("UTF-8")); 
System.out.println(message); //print message for testing purposes 

if (message == "request"){ 
    //code here does not get executed 
} 

Проблема заключается в том, мой код не введите оператор «if», даже если message = «request», который также подтверждается моим заявлением на печать.

Любая помощь будет оценена!

+0

Сравнение строк не имеет ничего общего с сетью. Сравнение строк используется везде. Его нельзя использовать как специфическую для TCP/IP. Это функция маршалинга данных. – Val

ответ

1

Причина этого заключается в том, что String s в Java необходимо сравнить с .equals, так что ваш тест должен быть:

if (message.equals("request")){ 

Это потому, что в Java, == проверяет, является ли два объекта являются одинаковыми экземпляр (он проверяет ссылочное равенство - как обе ссылки указывают на одну и ту же память), а не равно.

Вы можете осуществить быстрый тест:

System.out.println("request" == new String("request")); 

Выход:

false 

Дополнительную информацию можно найти this SO ответ.

+0

Спасибо, bmorris! – 2013-04-11 16:11:28