我基本完整的解决了问题,方法如下:
1、由于事先有预料会发生类似问题,我定义了自己的结构如下:
1-4bit 命令代码,5-8bit,参数1长度,9-13bit,参数2长度,以后为参数实体。
2、定义以下函数:
function ValidMsg(Msg:String):Boolean;是否有完整信息
function MsgLen(Msg:String):Integer;当前Msg的长度
function TrimFirst(var msg:String):String;返回当前记录并在总缓冲中去处之
3.定义二级缓冲 TmpBuffer:String;初试为空
4.OnRead中类似代码:
TmpBuffer := TmpBuffer + Socket.ReceiveText;
while ValidMsg(TmpBuffer) do
begin
Msg := TrimFirst(TmpBuffer);
ProcessMsg(Msg);
end;
5、基本解决问题了,不过我知道while部分最好教给线程来完成。不过,问题比我想像中
要复杂的多了(我以前以为一个send对应一个read,多简单……)所以,他老人家出的价
已经不够开第二个线程了(CJ好黑,呵呵……),不过,由于要求不高,调试了一下,
程序工作良好且稳定,所以么……嘿嘿
问题到这里基本结束了,谢谢诸位大虾小米,多谢
问题放几天,需要的同志还能参考参考……或者指出还有什么问题……
谁能给出用线程处理的代码?要考虑重入之类,实在麻烦,懒的弄了。给出代码的有分哦