这个错误是因为在调用listener.Stop()之前,AcceptTcpClient()方法仍然在等待连接。要解决这个问题,可以在调用listener.Stop()之前使用listener.Server.Close()来关闭listener的底层套接字。修改代码如下:

private void ReceiveImages()
{
    continueReceiving = true;
    listener = new TcpListener(IPAddress.Parse(GetLocalIPAddress()), 1025);

    listener.Start();

    while (continueReceiving)
    {
        try
        {
            TcpClient imageClient = listener.AcceptTcpClient();
            NetworkStream imageStream = imageClient.GetStream();

            // 先接收图像数据的长度
            byte[] lengthBytes = new byte[4];
            imageStream.Read(lengthBytes, 0, 4);
            int length = BitConverter.ToInt32(lengthBytes, 0);

            byte[] imageData = new byte[length];
            int totalBytesRead = 0;
            int bytesRead = 0;

            while (totalBytesRead < length &&
                   (bytesRead = imageStream.Read(imageData, totalBytesRead, length - totalBytesRead)) > 0)
            {
                totalBytesRead += bytesRead;
            }

            if (totalBytesRead > 0)
            {
                using (MemoryStream ms = new MemoryStream(imageData))
                {
                    Image receivedImage = Image.FromStream(ms);

                    // 在PictureBox中展示图片
                    pictureBox1.Image = receivedImage;
                }
            }
            // 关闭并释放套接字资源
            imageStream.Close();
            imageClient.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        finally
        {
            // 关闭并释放套接字资源
            listener.Server.Close();
            listener.Stop();
        }
    }
}
``
接收图片 private void ReceiveImages continueReceiving = true; listener = new TcpListenerIPAddressParseGetLocalIPAddress 1025; listenerStart; whil

原文地址: https://www.cveoy.top/t/topic/iy5t 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录