Мне удалось отправить двоичные данные через TCP, используя NetworkStream
и сокеты.Моя единственная проблема заключается в том, что когда я отправляю файлы большего размера, например, несколько сотен изображений КБ, они не передаются правильно, половина изображения отсутствует.На стороне сервера я Socket.Send
для передачи данных.На стороне клиента я использую Socket.BeginReceive
с буфером размером 1024
, который записывается в MemoryStream
, позже я использую new Bitmap(Stream)
для преобразования этого MemoryStream
в изображение, которое может быть отображено в PictureBox
.
Какой метод следует использовать, чтобы избежать потери данных?
Редактировать: отправленный код
listener = new TcpListener(myAddress, 86);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
ns = client.GetStream();
byte[] buffer = new byte[1024];
while (fileTransfer)
{
ms = new MemoryStream();
do
{
int length = ns.Read(buffer, 0, buffer.Length);
ms.Write(buffer, 0, length);
// with this line added the data loss apparently disappears
System.Threading.Thread.Sleep(1);
} while (ns.DataAvailable);
UpdateData();
ms.Dispose();
System.Threading.Thread.Sleep(10);
}
ns.Dispose();
client.Close();
listener.Stop();
Редактировать: данные все еще иногда повреждены даже при использовании метода сна.