【发布时间】:2012-09-07 21:41:38
【问题描述】:
我要做的是将客户端屏幕的图像传输到服务器。 为此,在客户端,我获取屏幕图像,将其转换为字节数组并通过 TCP 套接字将字节数组发送到服务器。 在服务器端,我将客户端的字节数组转换为图像,放入pictureBox中。
嗯,结果在客户端看起来很酷,但是我在服务器端得到的图片是扭曲的:
右图是客户端(存屏发给服务器), 服务器端在左侧。 如您在服务器端看到的,图片未满。
我正在使用这些代码发送图像,接收图像并转换(字节>图像||图像>字节):
private Image getScreen()
{
Size s = Screen.PrimaryScreen.Bounds.Size;
Bitmap b = new Bitmap(s.Height, s.Width);
Graphics g = Graphics.FromImage(b);
g.CopyFromScreen(0, 0, 0, 0, s);
return b;
}
private byte[] BmpToBytes(Image bmp)
{
MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Jpeg);
byte[] bmpBytes = ms.GetBuffer();
bmp.Dispose();
ms.Close();
return bmpBytes;
}
private Image BytesToImg(byte[] bmpBytes)
{
MemoryStream ms = new MemoryStream(bmpBytes);
Image img = Image.FromStream(ms);
return img;
}
Client side:
private void SendScreenToServer()
{
while (true)
{
byte[] sendBytes = new byte[12500];
sendBytes = BmpToBytes(getScreen());
pictureBox1.Image = getScreen();
serverStream.Write(sendBytes, 0, sendBytes.Length);
serverStream.Flush();
}
}
Server side:
private void GetScreenFromClient()
{
while (true)
{
byte[] bytesFrom = new byte[12500];
networkStream.Read(bytesFrom, 0, clientSocket.ReceiveBufferSize);
try
{
pictureBox1.Image = BytesToImg(bytesFrom);
}
catch { }
}
}
有人知道我做错了什么吗?还是有任何其他选项可以通过套接字传输图像?
【问题讨论】:
-
您没有粘贴任何发送或接收代码。另外,你的协议是如何工作的?接收者应该如何知道它何时收到了整个图像?
-
你的权利,我已经添加了这些代码。我用'while(true)'循环发送图像,与接收器相同。
-
请直接在本站发布您的代码,我已经更新了您的帖子。
-
对了,
sendBytes = BmpToBytes(getScreen());会丢弃你在byte[] sendBytes = new byte[12500];中创建的数组。所以你可以删除那行代码。
标签: c# image sockets tcp bitmap