Exemple #1
0
 public void WatchConnecting(Object socketObject)
 {
     try
     {
         //Console.WriteLine("服务器正在监听...");
         SocketParameter socketParameter = socketObject as SocketParameter;
         while (running)
         {
             // 开始监听客户端连接请求,Accept方法会阻断当前的线程;
             // 一旦监听到一个客户端的请求,就返回一个与该客户端通信的套接字;
             Socket                socketClient      = _Watchsocket.Accept();
             CallServiceThread     callServiceThread = new CallServiceThread(socketClient);
             DelegateSocketMessage caller            = new DelegateSocketMessage(callServiceThread.ReceiveMessage);
             IAsyncResult          result            = caller.BeginInvoke(socketParameter, null, null);
             string                message           = caller.EndInvoke(result);
             UIDelegateUIMessage(message);
             //Console.Write(message);
         }
         if (_Watchsocket != null)
         {
             _Watchsocket.Close();
             _Watchsocket.Dispose();
         }
     }
     catch
     {
         //Console.WriteLine(e.Message);
         if (_Watchsocket != null)
         {
             _Watchsocket.Close();
             _Watchsocket.Dispose();
         }
     }
 }
Exemple #2
0
        public string start(SocketParameter socketParameter)
        {
            try
            {
                if (_Watchsocket != null)
                {
                    _Watchsocket.Close();
                    _Watchsocket.Dispose();
                }
                _Watchsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                _Watchsocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                IPEndPoint serverPoint = new IPEndPoint(IPAddress.Parse(socketParameter.Host), socketParameter.Port);
                _Watchsocket.Bind(serverPoint);
                //挂起队列最大值
                _Watchsocket.Listen(20);
                //创建负责监听的线程
                _WatchThread = new Thread(new ParameterizedThreadStart(WatchConnecting));
                _WatchThread.IsBackground = true;
                _WatchThread.Start(socketParameter);

                return("SUCCESS");
            }
            catch (Exception e)
            {
                //Console.WriteLine(e);
                return(e.Message);
            }
        }
Exemple #3
0
        /**
         * 本地TCP消息接收处理
         **/
        public string ReceiveMessage(SocketParameter socketParameter)
        {
            string        message = null;
            NetworkStream stream  = null;
            StreamReader  reader  = null;
            StreamWriter  writer  = null;

            try
            {
                //_tcpClient = new TcpClient();
                //_tcpClient.Client = socket;
                //stream = _tcpClient.GetStream();
                stream = new NetworkStream(socket);
                reader = new StreamReader(stream, socketParameter.Charset);
                writer = new StreamWriter(stream, socketParameter.Charset);
                StringBuilder sb   = new StringBuilder("接收来自" + socket.RemoteEndPoint.ToString() + "的消息:");
                StringBuilder sc   = new StringBuilder();
                string        line = null;
                while ((line = reader.ReadLine()) != null)
                {
                    if ("EOF".Equals(line))
                    {
                        break;
                    }
                    //Console.WriteLine("接收来自" + socket.RemoteEndPoint.ToString() + "的消息:" + line);
                    sb.Append(line).Append("\r\n");
                    sc.Append(line);
                }
                string respone = "ACK";
                message = sb.ToString();
                respone = print(sc.ToString());
                sb.Clear();
                sc.Clear();
                writer.WriteLine(respone);
                //writer.Write("\r\n");
                //多输出一行终止标识符告诉客户端本次数据发送结束
                writer.WriteLine("EOF");
                //writer.Write("\r\n");
                writer.Flush();
            }
            catch (Exception e)
            {
                message = e.Message;
            }
            finally
            {
                if (writer != null)
                {
                    writer.Close();
                    writer.Dispose();
                }
                if (reader != null)
                {
                    reader.Close();
                    reader.Dispose();
                }
                if (stream != null)
                {
                    stream.Close();
                    stream.Dispose();
                }
                if (socket != null)
                {
                    socket.Close();
                    socket.Dispose();
                }
            }

            return(message);
        }