//读取完成时的回调方法
        private void ReadComplete(IAsyncResult ar)
        {
            int bytesRead;

            try
            {
                lock (streamToServer)
                {
                    bytesRead = streamToServer.EndRead(ar);
                }

                //TODO 服务端断开事件
                if (bytesRead == 0)
                {
                    throw new Exception("已断开连接");
                }

                string[] messageArrive = Model.Decode(bytesRead, buffer);
                Array.Clear(buffer, 0, buffer.Length);// 清空缓存,避免脏读

                if (messageArrive[0] == Model.Server_Proxy_Start)
                {
                    //传回分配的端口
                    int remotePort = Convert.ToInt32(messageArrive[1]);

                    //回传端口号
                    if (GetPortEvent != null)
                    {
                        GetPortEvent(serverIP, remotePort);
                    }

                    //销毁转发(如果存在)
                    if (udpForwardClient != null)
                    {
                        removeForward();
                    }
                    //开始转发
                    udpForwardClient = new UdpForwardClient(serverIP, remotePort);

                    //TODO 其他处理
                }

                lock (streamToServer)
                {
                    AsyncCallback callBack = new AsyncCallback(ReadComplete);
                    streamToServer.BeginRead(buffer, 0, BufferSize, callBack, null);
                }
            }
            catch (Exception ex)
            {
                if (streamToServer != null)
                {
                    streamToServer.Dispose();
                }
                client.Close();

                MessageBox.Show(ex.Message.ToString(), "错误");
                removeForward();
            }
        }
 public void removeForward()//销毁转发
 {
     if (udpForwardClient != null)
     {
         udpForwardClient.Close();
         udpForwardClient = null;
     }
 }