C# 通过TCP/IP发送图像
我正在处理一个个人项目,作为第一个任务,我需要TCP服务器在客户端请求时向客户端发送特定数量的屏幕截图。在这个例子中,客户端只能收到两张超过十张的图片,我现在不知道为什么它会在那之后停止。我怀疑这与客户端的接收缓冲区有关。 Client.cs:C# 通过TCP/IP发送图像,c#,tcp-ip,remote-desktop,C#,Tcp Ip,Remote Desktop,我正在处理一个个人项目,作为第一个任务,我需要TCP服务器在客户端请求时向客户端发送特定数量的屏幕截图。在这个例子中,客户端只能收到两张超过十张的图片,我现在不知道为什么它会在那之后停止。我怀疑这与客户端的接收缓冲区有关。 Client.cs: string serverName = "localhost"; int serverPort = 7; TcpClient client; NetworkStream netStream; int readBytes = 0; try {
string serverName = "localhost";
int serverPort = 7;
TcpClient client;
NetworkStream netStream;
int readBytes = 0;
try
{
for (int i = 0; i < 10; i++)
{
client = new TcpClient(serverName, serverPort);
netStream = client.GetStream();
Console.WriteLine("Receiving ....");
byte[] buffer = new byte[500000];
while ((readBytes = netStream.Read(buffer, 0, buffer.Length)) > 0) {}
MemoryStream ms = new MemoryStream(buffer);
Image receivedImg = Image.FromStream(ms);
receivedImg.Save(@"C:\Users\fm_pc\Desktop\screen\test");
buffer.Initialize();
netStream.Close();
client.Close();
}
}
catch (Exception ex)
{
Console.WriteLine("Error in Sender : {0}", ex.Message);
}
当然,这个while循环是一个等待循环,客户端在那里等待,直到它接收到服务器发送的全部数据。在我看来,它好像一直在写入同一个缓冲区。例如,如果while循环执行两次,第一次迭代的结果将丢失。您必须在映像开始时发送字节计数,然后在接收端读取字节计数,然后继续读取,直到读取整个映像。提示:
netStream.CopyTo(ms)
将是您的朋友。。。
int port = 7;
TcpListener listener = new TcpListener(IPAddress.Any, port);
listener.Start();
//Send screenshots to connected client:
try
{
SceenShoter sceenShote = new SceenShoter();
Image imgToSend;
TcpClient client;
NetworkStream netStream;
MemoryStream ms = new MemoryStream();
client = listener.AcceptTcpClient();
netStream = client.GetStream();
imgToSend = sceenShote.GetScreenShot();
imgToSend.Save(ms, ImageFormat.Jpeg);
byte[] buffer = ms.ToArray();
netStream.Write(buffer, 0, buffer.Length);
client.Close();
netStream.Close();
}
catch (Exception ex)
{
Console.WriteLine("Error in the receiver : {0}", ex.Message);
}