2012-07-22 2 views
1

в программе клиент/сервер без мульти-клиент
когда сервер отправить два сообщения, например:гнездо C# отправить и получить

byte[] data = Encoding.Default.GetBytes("hello world1"); 
socket.Send(data1, 0, data.Length, 0); 

byte[] data = Encoding.Default.GetBytes("hello world2"); 
socket.Send(data1, 0, data.Length, 0); 

Клиент получил два сообщения в одном сообщении, как:

привет world1hello world2

, но я хочу, чтобы клиент получить отправить получено

, пожалуйста, помогите мне, как исправить? ??? :(

ответ

2

Используйте разделительную линию как «\ п» и расщепленное Incomming сообщений. С помощью TCP вы должны быть готовы к ситуации, когда пакеты расщепленные вверх или присоединившейся.

Если вы использовали UDP, вы можете отправить отдельные пакеты .

2

Вот некоторые из ваших вариантов

  1. вы можете использовать длину префикса сообщение. Где вы всегда отправить длину сообщения, например, в первые 4 байта. сервер будет читать первые четыре байт s и знать длину и знать, сколько оставшихся байтов является частью этого сообщения. Он знал бы следующие четыре байта и так далее и так далее.
  2. У вас может быть сообщение demarker. Например, если вы знаете, что в вашем сообщении никогда не будет определенного битового шаблона, вы можете отправить его в качестве демаркера сообщений. В качестве примера сервер может всегда сканировать битовый шаблон 0,1,0,1,0,1 и знать, что сообщение завершено
  3. Вы можете использовать платформу более высокого уровня WCF, где инфраструктура обрабатывает ее для вас
Смежные вопросы