远程协助开发总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了远程协助开发总结相关的知识,希望对你有一定的参考价值。
远程协助开发的过程中继续总结
针对开发总结一的问题,改正了一些地方
1.图像和命令采用两个套接字,为什么不能采用一个套接字?远程协助是快频的通信,图像需要不间断的从受控端发送到控制端,发送接收压力都很大,另外控制端还要发送鼠标和键盘命令到受控段,这个发送频率在操作的时候也很大。所以使用一个套接字压力太大。
2.图像的传输,图像比较大一般100-300K,所以需要多次分发,为了保证分发的安全性,先发送文件大小,再发送文件内容
3.命令的传输,不适合像文件那样的精确发送,可以设置一个缓冲,一般几百k的大小,受控段做好粘包的处理
4.不能只考虑Socket的关闭,socket所在的通信线程也要及时终止
安全的方式是这样写
catch (SocketException ex) { CommandLog.WriteClientLog("Receive Command SocketException", ex.Message); break; } catch (ThreadAbortException ex) { CommandLog.WriteClientLog("Receive Command ThreadAbortException", ex.Message); break; } catch (Exception ex) { CommandLog.WriteClientLog("Receive Command Exception", ex.Message); }
关闭socket
public void CloseConnect() { if (ImageSocket != null && ImageSocket.Connected) { try { ImageSocket.Shutdown(SocketShutdown.Both); } finally { ImageSocket.Close(); } } if (CommandSocket != null && CommandSocket.Connected) { try { CommandSocket.Shutdown(SocketShutdown.Both); } finally { CommandSocket.Close(); } } ImageSocket = null; CommandSocket = null; IsControled = false; IsControler = false; if (CommandThread != null) { CommandThread.Abort(); } if (SendScreenThread != null) { SendScreenThread.Abort(); } if (ImageThread != null) { ImageThread.Abort(); } if (ClientUser != null) { lock (_lock) { if (ClientUser != null) { string userName = ClientUser.UserName; ClientUser = null; if (UserLogout != null) { this.Form.Invoke(UserLogout, this, new LoginEventArgs(new LoginResultCommand { UserName = userName })); } } } } }
以上是关于远程协助开发总结的主要内容,如果未能解决你的问题,请参考以下文章