TCP通訊協議(中)字串邊界問題

2021-09-05 10:16:32 字數 2081 閱讀 9276

案例來自張子陽的《net之美》,經消化後放在這。

如果希望字串整齊傳輸,那麼需要提出乙個「標誌」,比如下面傳輸「今天聖誕,祝大家節日快樂!」,在字串前加入【length=13】,有點類似資料報的幀頭幀尾,有效資料總是緊跟其後。 得到有效資料的長度後,可以進行擷取、列印。有效資料的長度可以自定義,例子中是13,即每次列印完整的「今天聖誕,祝大家節日快樂!」。這裡的標誌,相當於http的協議

以下有四種情況:1.收到資料的標誌完整【length=13】,那麼看後面有效資料,假如後者字元個數剛剛好等於13,就當次列印;如果大於13,就遞迴呼叫getactualstring(string input, listoutputlist),見所有完整的「今天聖誕,祝大家節日快樂!」都儲存到列表裡,當次一並列印出來,多餘的湊不齊的,存到temp裡頭,和下次傳入的字串合併;如果小於13,存temp。2.收到的資料的標誌不完整,比如「【leng:」,存temp。

using system;

using system.collections.generic;

using system.linq;

using system.net;

using system.net.sockets;

using system.text;

using system.text.regularexpressions;

using system.threading.tasks;

namespace client

public string getactualstring(string input, listoutputlist) //處理字串,return a stringlist

if (!string.isnullorempty(temp))

string output = "";

string pattern = @"(?<=^\[length=)(\d+)(?=\])";//正規表示式

int length;

if (regex.ismatch(input, pattern))//標誌完整,有效字串總是在標誌之後出現

else if (output.length < length)

else if (output.length >length)

}else //標誌不完整,暫存

return outputlist.toarray();

}static void main(string args)

[length=13]", input);

handler.printoutput(input);

//test3 標誌完整,但有效字串多了,多餘的放在快取,與下一次傳入的合併

input = "[length=13]今天聖誕,祝大家節日快樂![length=13]今天聖誕";

handler.printoutput(input);

input = ",祝大家節日快樂!";

handler.printoutput(input);

//test4 標誌完整,但有效字串少了,放在快取,與下一次傳入的字串合併

input = "[length=13]今天聖誕,祝大家";

handler.printoutput(input);

input = "節日快樂![length=13]今天聖誕,祝大家節日快樂!";

handler.printoutput(input);

//test4 標誌完整,但有效字串少了,放在快取,與下一次傳入的字串合併

input = "[leng";

handler.printoutput(input);

input = "th=13]今天聖誕,祝大家節日快樂![length=13]今天聖誕,祝大家節日快樂!";

handler.printoutput(input);

console.readkey();

}private void printoutput(string input)//列印字串

console.writeline();}}

}

TCP協議的無訊息邊界問題

使用tcp協議編寫應用程式時,需要考慮乙個問題 tcp協議是無訊息邊界的,即不能保證來自單個send方法的資料能被單個receive方法讀取。eg 第一次傳送 abcdefg 第二次傳送 123456 接收方接收資料時,可能會出現以下情況 第一次接收 abcdefg123456 也可能出現 第一次接...

字串通訊協議解析函式

unit hutil32 提供大量的輔助函式 inte ce uses classes,sysutils,wintypes,winprocs,graphics,messages,dialogs type str4096 array 0.4096 of ansichar str256 array 0....

關於字串的交迭與邊界問題演算法的一些回顧

又見字串演算法,看到那個交迭和邊界的演算法,真是看到腦殼痛。由於原文資料還是英文的,上週就在那翻譯了,還沒仔細看過,也不知道翻譯的對不對,今晚拿著列印版的跑到教室坐了會,假日人少但很清靜!整個晚上光看交迭和邊界問題了。文章演算法給出來了,不至於看不懂吧,但實際上就是看不懂 什麼叫兩個字串x和y的交迭...