2012-04-19 2 views
0

Хорошо, это последнее препятствие, с которым я борюсь.больше проблем с UDP

Im пытается разрешить клиенту связываться с одним другим клиентом, когда они префикс имени целевого клиента для своего сообщения.

Например, если Ян хочет общаться с законопроектом он бы:

bill hi mate 

Сейчас, в настоящее время, когда новый клиент подключается к серверу их имя хранится в списке массива. Поскольку это использует пакеты данных и байтовые буферы, это означает, что когда я храню имя, он также сохраняет длину имен. По умолчанию на сервере размер буфера пакетов данных равен 512, поэтому каждая длина имен составляет 512.

Это не было проблемой до сих пор. Я сделал следующее, чтобы кто клиент хочет общаться с:

else 
{ 
    System.out.println("Client said: "+response+"\nPacket Size: "+packet.getLength()+"\nString Length: "+response.length()); 
    String [] usrInput = response.split(" "); 
    System.out.println("Length of split string: "+usrInput.length); 
} 

Он разбивает их вклад в массив и смотрит на первой позиции массива для имени. Итак, сверху, у нас будет счет в первой позиции.

Здесь я ошибаюсь; Я попытался с помощью:

  1. содержит()
  2. Equals()
  3. матчи()

и так далее, но все в обязательном порядке; Я предполагаю, что длина имени сохранена. Итак, как я могу уменьшить размер имени, хранящегося только, например, счет-4?

Приветствия

+1

Несвязанное примечание, для чат-подобных программ (или чего-то, что требует надежности), думает об использовании TCP вместо UDP. – RageD

+0

Чтобы уточнить примечание @ RageD, это связано с тем, что UDP не гарантирует, что сообщения будут получены в том же порядке, в каком они были отправлены. С другой стороны, TCP действительно обеспечивает упорядочение. – user1329572

+0

Я не могу использовать TCP - мне нужно использовать UDP - никакой другой вариант – Katana24

ответ

1

Вы строите строка ФОМ пакет неправильно. DatagramPacket содержит свою собственную фактическую длину. Вы должны использовать это, а не длину всего массива байтов.

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