gpt4 book ai didi

c# - 在 C# 中从单个网络流发送多种类型的数据

转载 作者:可可西里 更新时间:2023-11-01 02:49:41 27 4
gpt4 key购买 nike

我正在创建一个类似于 Microsoft Netmeeting 的程序,因为我必须从单个连接发送多种类型的数据,例如鼠标位置、按下的键和一次关闭屏幕截图。我成功地向客户端发送和接收屏幕截图,但我无法理解如何通过单个连接发送多个数据。

我认为为此需要多个端口。一张用于屏幕截图,一张用于鼠标位置,一张用于按键。

以下是我使用的代码:Server = ScreenShot 的 Sender,MousePos 和 Key 的 Recever。Client = ScreenShot 的接收者,MousePos 和 Key 的发送者。

服务器:

void StartListen()
{
try
{
IPEndPoint ipendp = new IPEndPoint(IPAddress.Parse(OwnIP()), 532);
tcpl = new TcpListener(ipendp);
tcpl.Start();
s1 = tcpl.AcceptSocket();
ns = new NetworkStream(s1);
timer1.Enabled = true;
while (true)
{
byte[] buffer = imageToByteArray(CaptureScreenShot());
s1.Send(buffer, buffer.Length, SocketFlags.None);
Thread.Sleep(250);
}
}
catch
{
tcpl.Stop();
ns.Close();
//tcpl.EndAcceptSocket();
Form1_Load(0,EventArgs.Empty);
}
}

客户:

void StartClient()
{
try
{

IPEndPoint ipendp = new IPEndPoint(IPAddress.Parse(toolStripTextBox1.Text), 532);
this.Text = "SWare Application - " + toolStripTextBox1.Text + ":532";
tcpc = new TcpClient();
tcpc.Connect(ipendp);
Socket s1 = tcpc.Client;
ns = tcpc.GetStream();

while (true)
{
byte[] b = new byte[500000];
s1.Receive(b);
MemoryStream ms = new MemoryStream(b);
pictureBox1.Image = Image.FromStream(ms);
//Thread.Sleep(250);
}
}
catch
{
tcpc.Close();
MessageBox.Show("Disconnected from the Remote PC");
}
}

最佳答案

您可以使用单个连接,但您必须为接收方提供一种在读取数据之前区分数据类型(及其大小)的方法。

也就是说,如果您正在编写连接的两端(客户端 + 服务器),那么使用 WCF 这样的技术会简单得多。它将允许您传递具有强类型数据的完整类实例,并自动为您处理底层传输(以可配置的方式)。

关于c# - 在 C# 中从单个网络流发送多种类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7906300/

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