程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Socket編程 (異步通訊,解決Tcp粘包)

Socket編程 (異步通訊,解決Tcp粘包)

編輯:C#入門知識

  從上一章的通訊中,我們發現如果使用Tcp連續發送消息會出現消息一起發送過來的情況,這樣給我們編程造成一定的問題,給我們的信息解析造成一定的問題。那麼這篇文章就將針對以上問題給出解決方案......

 

問題一般會出現的情況如下,假設我們連續發送兩條兩天記錄("我是liger_zql"):

模擬發送示例:

 測試消息發送,並匹配協議=  ( i = ; i < ; i++=  MessageProtocol(, i + 

  1.(1)我是liger_zql(2)我是liger_zql

  2.(1)我是liger_zql我是(2)liger_zql

  3.(1)我是liger_zql我是liger_zql

通過以上三種情況,顯然2、3都不是我們想要的結果。那麼如何處理這中情況呢?

解決方案:通過自定義協議...

我們可以以將信息以xml的格式發送出去,列入<protocol>content</protocol>通過正則匹配信息是否完整,如果不完整,我們可以先將本次接受信息緩存接受下一次信息,再次匹配得到相應的結果。

將信息對象轉換成一定格式的xml字符串:

 
     
       Content { ; ; }
         MessageInfo(.Content =   String.Format(,  
     
       Address { ; ; }
          Port { ; ; }
         RequestMode Mode { ; ; }
         FileObject FileObject { ; ; }
        .Mode =.FileObject = RequestFile( address, .Address =.Port =.Mode =.FileObject = RequestFile( address,  port, RequestMode mode,  filename,  filelength,  packetsize, .Address =.Port =.Mode =.FileObject =   =  
     
      MessageType MessageType { ;  MessageInfo MessageInfo { ;  RequestFile RequestFile { ;  MessageProtocol(== ==  MessageProtocol( address, ==   =  (MessageType ==  Encoding.UTF8.GetBytes(

對接收的信息通過正則進行匹配處理:

          temp = 
         List<MessageProtocol> HandlerString(<MessageProtocol> msgProList =  List<MessageProtocol> (!= temp + pattern = 
                 match = Regex.Match(msg, pattern).Groups[
= 
                msg = (!=

然後將該定義的協議換換成信息對象,通過對象獲取自己想要的信息。

        
         MessageProtocol HandlerObject(= == root.SelectSingleNode(=  (root.Attributes[].Value ====  MessageInfo(msgnode.Attributes[== (RequestMode)Enum.Parse((RequestMode), msgnode.Attributes[= = msgnode.Attributes[= Convert.ToInt64(msgnode.Attributes[= Convert.ToInt32(msgnode.Attributes[= Convert.ToInt64(msgnode.Attributes[= 

最後運行結果如下:

好了Tcp粘包的問題我們解決了。下一章我們將解決Udp丟包的個人解決方案!

附上源碼:SocketProQuests.zip












		
		

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved