【发布时间】:2017-07-07 18:17:40
【问题描述】:
我正在开发一个程序,在该程序中我想从我的电脑上移动远程电脑的光标,但是这里有一个小问题,在远程电脑上接收鼠标坐标,远程机器上的 tcp 服务器接收到的数据由于延迟而不是立即推送一些这里放置的是我保存在文件中的代码和输出坐标,用于客户端发送和服务器接收。
发送坐标的客户端代码。
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (isconnected)
{
try
{
NetworkStream serverStream = clientSocket.GetStream();
this.Cursor = new Cursor(Cursor.Current.Handle);
int pX = Cursor.Position.X;
int pY = Cursor.Position.Y;
byte[] outStream = System.Text.Encoding.ASCII.GetBytes($"{pX}#{pY}");
System.IO.File.AppendAllText(@"F:\DOWNLOAD\client.txt", $"{pX}#{pY}" + Environment.NewLine);
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
}
catch (Exception ex)
{
}
}
}
接收坐标的服务器代码
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
try
{
// Translate data bytes to a ASCII string.
// Receive mouse coordinates here
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
string Coordinates = data.ToString();
string X = Coordinates.Substring(0, Coordinates.IndexOf('#'));
string Y = Coordinates.Substring(Coordinates.IndexOf('#') + 1);
coordvalue.Invoke((MethodInvoker)(() => coordvalue.Text = ""));
coordvalue.Invoke((MethodInvoker)(() => coordvalue.Text = $"{X} and {Y}"));
coordvalue.Invoke((MethodInvoker)(() => coordvalue.Update()));
// Change coordinates
System.Windows.Forms.Cursor.Position = new Point(Convert.ToInt32(X), Convert.ToInt32(Y));
Cursor.Clip = new Rectangle(this.Location, this.Size);
System.IO.File.AppendAllText(@"F:\DOWNLOAD\server.txt", $"{X} and {Y}" + Environment.NewLine);
}
catch (Exception E)
{
// MessageBox.Show(E.ToString());
}
}
从客户端发送坐标
653#492 659#490 669#489 677#486 684#483 693#476 699#470 709#460 715#453 720#444 724#437
在服务器上接收坐标 653 和 492 659 和 490 669 和 489 677 和 486 684 和 483 693 和 476 699 和 470 709 和 460715#453720#444 724和437
这里的问题是 709 和 460715#453720#444,因为旧坐标没有被向前推进并且附加了不适合鼠标位置的新坐标请帮助。
【问题讨论】:
-
使用不缓冲和重新发送的 UDP 解决方案可能会更好地为您服务 - 只是尽可能快地获取信息。只要鼠标位置被一遍又一遍地发送,如果你偶尔丢包,没什么大不了的。
-
谢谢@MichaelDorgan,我会努力的。