Загрузка...

Проблема с передачей по tcp

Тема в разделе C# создана пользователем TheWall_inactive2650523 31 июл 2021. 226 просмотров

  1. TheWall_inactive2650523
    TheWall_inactive2650523 Автор темы 31 июл 2021 Waiting for the worms to come 52 23 сен 2019
    Пытаюсь отправить картинку Image с клиента на сервер используя классы TcpClient, TcpListener.
    Проблема в том что даже половины изображения не доходит, вместо нее просто серые пиксели.

    Код клиента (Отправляет картинку на сервер в виде байтов)
    Код
     using (TcpClient client = new TcpClient())
    {
    client.Connect(IPAddress.Parse(address), port);

    NetworkStream nwStream = client.GetStream();

    MemoryStream memoryStream = new MemoryStream();

    Image screen = CaptureScreen();

    screen.Save(memoryStream, ImageFormat.Jpeg);

    byte[] data = memoryStream.ToArray();

    nwStream.Write(data, 0, data.Length);
    nwStream.Flush();
    client.Close();
    }
    Код сервера (Принимает картинку и ставит в pictureBox)
    Код
     TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), port);

    server.Start();

    while (true)
    {
    TcpClient clientCopy = server.AcceptTcpClient();

    NetworkStream nwStream = clientCopy.GetStream();

    byte[] buffer = new byte[clientCopy.ReceiveBufferSize];

    int bytesRead = nwStream.Read(buffer, 0, clientCopy.ReceiveBufferSize);

    MemoryStream imageStream = new MemoryStream(buffer);

    Image returnImage = Image.FromStream(imageStream);

    if (returnImage != null)
    {
    pictureBox1.BackgroundImage = returnImage;
    pictureBox1.Refresh();
    }

    }
     
  2. r3xq1
    Про async/await слышал? изучай, у тебя клиент и сервер закроются быстрее чем ты что-то передашь
     
    1. TheWall_inactive2650523 Автор темы
      r3xq1, Я использую его, но не вставил сюда, попрошу сюда не писать по пустякам
  3. SijyKijy
    SijyKijy 1 авг 2021 Сгнил 34 10 мар 2017
    > Проблема в том что даже половины изображения не доходит, вместо нее просто серые пиксели.
    Всё правильно, ты же используешь ReceiveBufferSize, а он по умолчанию 8192 байтиков. Т.е. за 1 раз ты считываешь с потока 8192 байтика, поэтому и картинка у тебя не полностью скачивается.
    Выше так верно написали, что сервак кидает поток и сразу же закрывается, а сервак не успевает прочитать весь
     
Загрузка...
Top