C#发送密钥在客户端无法正常工作

C#发送密钥在客户端无法正常工作,c#,.net,winforms,tcpclient,sendkeys,C#,.net,Winforms,Tcpclient,Sendkeys,我正在用C#WinForms开发一个通过TCP共享远程桌面的工具 到目前为止,我所做的是使用桌面查看器,并将鼠标单击发送到重点桌面共享窗口。那很好 现在,我正在将按下的按键发送到聚焦窗口,但有两种情况下它无法正常工作: 1-当我一直按一个键时 2-当我开始快速按键时 当我打字慢,没有问题 在查看器窗口中我有一个构造函数: public ViewerWindow() { KeyDown += KeyDownHandler; InitializeCompon

我正在用C#WinForms开发一个通过TCP共享远程桌面的工具

到目前为止,我所做的是使用桌面查看器,并将鼠标单击发送到重点桌面共享窗口。那很好

现在,我正在将按下的按键发送到聚焦窗口,但有两种情况下它无法正常工作:

1-当我一直按一个键时

2-当我开始快速按键时

当我打字慢,没有问题

查看器窗口中我有一个构造函数:

public ViewerWindow()
{    
        KeyDown += KeyDownHandler;

        InitializeComponent();
 }
以下是获取按下的键并写入流以将其传递给客户端的处理程序:

public void KeyDownHandler(object sender, KeyEventArgs e)
{
    var keyPressed = e.KeyData.ToString();
            
    var key = string.Concat("keyboard", " ", keyPressed);
    //sending key here
    byte[] sendBytes = Encoding.UTF8.GetBytes(key);
    client.GetStream().Write(sendBytes, 0, sendBytes.Length);
}
在sream读取循环的客户端中,我有以下代码来接收关键数据并对其进行处理:

if (incomingData.Length > 7 && incomingData.Substring(0, 8) == "keyboard")
{
     string[] inf = incomingData.Split();

     if (inf.Length > 1)
     {
       Keyboard.SendKey(inf[1]);
     }
}
键盘是一个带有SendKey方法的静态类,它只有以下代码:

public static class Keyboard
{
        [DllImport("User32.dll")]
        static extern int SetForegroundWindow(IntPtr point);

        public static void SendKey(dynamic key)
        {
            SendKeys.SendWait(key);
        }
}
然而,当我按住或快速键入键时,我收到“键盘”字,似乎它有“键盘”字,我不知道为什么。。。有没有解决这个问题的建议/想法

我白手起家,但不知道这是否是一个体面的解决方案

任何帮助或指导都将不胜感激


谢谢。

是否您的TCP流正在缓冲发送数据,直到其达到更合适的大小

在写完之后尝试流

byte[]sendBytes=Encoding.UTF8.GetBytes(键);
var stream=client.GetStream();
stream.Write(sendBytes,0,sendBytes.Length);
stream.Flush();

通常,TCP连接将多个小数据块收集到一个大TCP数据包中以节省网络带宽。通过将属性设置为
true
,可以覆盖此行为,这将在每次调用
Write()

最终成功后导致刷新!非常感谢。