案例來自張子陽的《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的交迭...