首页 > 代码库 > 远程协助开发总结(二)

远程协助开发总结(二)

远程协助开发的过程中继续总结

针对开发总结一的问题,改正了一些地方

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

 

远程协助开发总结(二)