接收图片 private void ReceiveImages continueReceiving = true; listener = new TcpListenerIPAddressParseGetLocalIPAddress 1025; listenerStart; whil
这个错误是因为在调用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();
}
}
}
``
原文地址: https://www.cveoy.top/t/topic/iy5t 著作权归作者所有。请勿转载和采集!