Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过TCP/IP发送图像_C#_Tcp Ip_Remote Desktop - Fatal编程技术网

C# 通过TCP/IP发送图像

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 {

我正在处理一个个人项目,作为第一个任务,我需要TCP服务器在客户端请求时向客户端发送特定数量的屏幕截图。在这个例子中,客户端只能收到两张超过十张的图片,我现在不知道为什么它会在那之后停止。我怀疑这与客户端的接收缓冲区有关。 Client.cs:

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);
}