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(); } } }
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); } }
/** * 本地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); }