2017-01-13 2 views
2

Я новичок в работе с сетевыми вещами на C# и только что закончил создание модели клиент/сервер. Единственная проблема, с которой я сталкиваюсь, заключается в том, что когда я получаю данные, часть ее обрезается. Например, я отправляю сообщение «Hello there!», И он просто отправил «Hello».Сообщения клиента/сервера TCP/Mail не отправляются должным образом

Пример:

image

Мой код для сервера

public static TcpClient tcpcl = new TcpClient(); 
    public static NetworkStream netstream; 
    static void Main(string[] args) 
    { 
     while(!tcpcl.Connected) 
     { 
      try 
      { 
       tcpcl.Connect("127.0.0.1", 1234); 
      } 

      catch 
      { 

      } 
     } 
     netstream = tcpcl.GetStream(); 
     while(tcpcl.Connected) 
     { 
      byte[] buffer = new byte[tcpcl.ReceiveBufferSize]; 
      int unicodeData = netstream.Read(buffer, 0, tcpcl.ReceiveBufferSize); 
      string plainText = Encoding.Unicode.GetString(buffer, 0, unicodeData); 
      Console.WriteLine(plainText); 

     } 

     tcpcl.Close(); 
    } 

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

public static TcpListener tcpl = new TcpListener(IPAddress.Any, 1234); 
    public static TcpClient tcpcl; 
    public static NetworkStream netstream; 
    static void Main(string[] args) 
    { 
     tcpl.Start(); 
     Console.WriteLine("Waiting for connection..."); 
     tcpcl = tcpl.AcceptTcpClient(); 
     netstream = tcpcl.GetStream(); 
     Console.WriteLine("Connection Established"); 
     while(tcpcl.Connected) 
     { 
      Console.WriteLine("Enter a message: "); 
      string ptMessage = Console.ReadLine(); 
      netstream.Write(Encoding.Unicode.GetBytes(ptMessage), 0, ptMessage.Length); 
      Console.WriteLine("Sent message"); 
     } 
     tcpcl.Close(); 
    } 

ответ

1

В клиенте, изменения:

string ptMessage = Console.ReadLine(); 
netstream.Write(Encoding.Unicode.GetBytes(ptMessage), 0, ptMessage.Length); 

Кому:

string ptMessage = Console.ReadLine(); 
byte[] bytes = Encoding.Unicode.GetBytes(ptMessage); 
netstream.Write(bytes, 0, bytes.Length); 

Последний параметр Write() должна быть длина возвращаемого массива байтов, а не длина исходной строки.

+0

Какая глупая ошибка. Спасибо за вашу помощь! – rrrrrrrrrrrrrrrr

+0

Это случается. Иногда нам просто нужен дополнительный набор глаз ... –

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