【发布时间】:2013-08-06 02:13:50
【问题描述】:
对此的新手,我一直在使用序列化来不断地发送图像数据。 这意味着我将图像保存在内存流中,并通过序列化发送。
但我不明白我应该使用序列化还是网络流。 我唯一要做的就是循环发送图像。
我一直试图让 Networkstream 工作,但它不符合我的要求,所以这是我的代码。由于某种原因,它只感知 1 张图像,当我使用序列化时,它会不断进行。
private void Initialize()
{
NetSerializer.Serializer.Initialize(new Type[] { typeof(MemoryStream) });
tcplisten = new System.Net.Sockets.TcpListener(IPAddress.Any, 1700);
tcplisten.Start();
}
private void Listen()
{
try
{
using (TcpClient tt1 = tcplisten.AcceptTcpClient())
{
tt1.NoDelay = true;
while (checkBox1.Checked)
{
panel1.BackgroundImage = Image.FromStream(tt1.GetStream());
}
}
}
catch
{
}
}
这里是发送:
private void Send()
{
try
{
string process = Proccessname.Text;
using (TcpClient tcp = new TcpClient())
{
tcp.NoDelay = true;
while (capcon == true)
{
if (tcp.Connected)
{
PrintWindow(process, tcp.GetStream());
}
else
{
tcp.Connect(adress);
}
}
}
}
catch
{
}
}
什么 PrintWindow(process, tcp.GetStream());做的很简单,截屏一个窗口(进程 = 进程的名称),然后将其保存在哪里(tcp.GetStream()),使其发送和流式传输(至少我认为是这样)。
它确实有点作用,如果我断开连接并连接等,它会发送图像,但我认为它非常随机,不知道为什么我必须这样做,我希望它继续发送,只要循环处于活动状态。
(这与序列化和 MemoryStream 完美配合(将位图保存在内存流中并在序列化中使用)。
所以这就像 2 个问题,取决于第一个问题的答案。
对于我的目的而言,(发送图像)、序列化或 NetworkStream 哪个更快? 如果 NetworkStream 更快,我怎样才能让它工作,我上面的代码有什么问题。
谢谢
if (tcp.Connected)
{
MemoryStream ms = new MemoryStream();
PrintWindow(process, ms);
panel1.BackgroundImage = Image.FromStream(ms);
}
这行得通,因此它正在连接,并且数据正在保存(为此更改为 MemoryStream 而不是 NetworkStream)。
【问题讨论】:
-
您的第二个 sn-p 代码实际上并没有显示 MemoryStream 是通过 NetworkStream 发送的,是吗?
-
哦,看到了,ms = tcp.GetStream(),会解决这个问题的。
-
示例代码的第二个 sn-p 仍然没有意义,因为您正在创建一个新的 TcpClient 并直接从中获取流,甚至没有连接到任何东西。
-
将给出整个代码,因为我认为它没有任何意义。
-
你确定这是你的全部代码吗?对我来说仍然没有多大意义。
标签: c# image performance stream