首页 > 代码库 > 远程协助开发总结(二)
远程协助开发总结(二)
远程协助开发的过程中继续总结
针对开发总结一的问题,改正了一些地方
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 })); } } } } }
远程协助开发总结(二)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。