gpt4 book ai didi

c# - TCP 客户端断开连接

转载 作者:可可西里 更新时间:2023-11-01 02:52:50 25 4
gpt4 key购买 nike

我是 TCPClient 的新手,我正在尝试制作一个网络摄像头应用程序,该应用程序将每个小图像发送 ~4kb 到另一个将运行相同程序的 IP。所以它会同时发送和接收。

我遇到的问题是 _tcpOut 在一次发送后断开连接,这意味着我只能看到一帧。在下面的代码中有两个部分,首先是 NewFrameReceived 在来自相机的每个新图像上运行,然后发送,另一个方法是将接收到的图片放入图片框的接收方法(目前我自己的来自127.0.0.1) :

private void fChat_Load(object sender, EventArgs e)
{
// fire up listener
listeningThread.RunWorkerAsync();

// tcp server setup
_tcpOut = new TcpClient();
_tcpOut.Connect("127.0.0.1", 54321);
}


private void NewFrameReceived(object sender, NewFrameEventArgs e)
{
Bitmap img = (Bitmap)e.Frame.Clone();

byte[] imgBytes = EncodeToJpeg(img, 25).ToArray();
if (_tcpOut.Connected) <-- PROBLEM HERE, THIS IS FALSE ON 2ND ITERATION
{
using (NetworkStream ns = _tcpOut.GetStream())
{
if (ns.CanWrite)
{
ns.Write(BitConverter.GetBytes(imgBytes.Length), 0, 4);
ns.Write(imgBytes, 0, imgBytes.Length);
}
}
}
}


private void listeningThread_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
// start listening for connections
_tcpIn = new TcpListener(IPAddress.Any, 54321);
_tcpIn.Start();

while (true)
{
using (TcpClient _inClient = _tcpIn.AcceptTcpClient()) // blocks until connected
{
using (NetworkStream stream = _inClient.GetStream())
{
Byte[] imgSizeBytes = new Byte[4];
stream.Read(imgSizeBytes, 0, 4);
int imgSize = BitConverter.ToInt32(imgSizeBytes, 0);
Byte[] imgBytes = new Byte[imgSize];
stream.Read(imgBytes, 0, imgSize);
MemoryStream ms = new MemoryStream(imgBytes);
Image img = Image.FromStream(ms);
picVideo.Image = img;
}
}
}
}

非常感谢。

最佳答案

它断开连接是因为您正在用 using 处理 TcpClient声明。

关于c# - TCP 客户端断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com