/// <summary> /// 接收消息包 /// </summary> /// <param name="stream"></param> private MessageBag ReceiveMessageBag(NetworkStream stream) { MessageBag bag = null; try { byte[] buffer = Utility.Stream.ReadStream(stream, MessageHead.HeadLength); MessageHead head = MessageHead.Parse(buffer); if (head.BodyLength > 0) { byte[] bytesBody = Utility.Stream.ReadStream(stream, head.BodyLength); bag = new MessageBag(head, bytesBody); } else { bag = new MessageBag(head); } } catch (Exception ex) { ExceptionRecord.Record(ex.Message + ex.Source + ex.TargetSite + ex.StackTrace); throw; } return(bag); }
/// <summary> /// 监听客户请求 /// </summary> public void Listen() { ///读取配置文件,获取端口号 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); string serverPort = config.AppSettings.Settings["ServerPort"].Value; incFilePath = Path.Combine(Application.StartupPath, "IncFile"); port = Convert.ToInt32(serverPort); try { listener = new TcpListener(IPAddress.Any, port); listener.Start(); while (true) { TcpClient client = listener.AcceptTcpClient(); NetworkStream stream = client.GetStream(); //接收消息包 MessageBag recBag = ReceiveMessageBag(stream); //解析消息包 AnalyzeMessageBag(stream, recBag); } } catch (Exception ex) { //Debug.Fail(ex.Message); ExceptionRecord.Record(ex.Message + ex.Source + ex.TargetSite + ex.StackTrace); throw; } }
/// <summary> /// 发送消息包 /// </summary> /// <param name="stream"></param> /// <param name="bag"></param> private void SendMessageBag(NetworkStream stream, MessageBag bag) { try { byte[] buffer = bag.ToBytes(); stream.Write(buffer, 0, buffer.Length); } catch (Exception ex) { // Debug.Fail(ex.Message); ExceptionRecord.Record(ex.Message + ex.Source + ex.TargetSite + ex.StackTrace); throw; } }
/// <summary> /// 更新服务器端词库 /// </summary> /// <param name="updateStr"></param> private void UpdateServerDict(string updateStr) { try { WordSqlXml sql = new WordSqlXml(); sql.LoadXml(updateStr); foreach (var item in sql) { WordSqlXmlAction word = (WordSqlXmlAction)item; word.Run(); } } catch (Exception ex) { ExceptionRecord.Record(ex.Message + ex.Source + ex.TargetSite + ex.StackTrace); } }