<strong><span style="font-size:18px;color:#ff0000;">下面的代码中包含了一个消息接收器,当消息接收器收到消息后,将socket,收到的消息,状态,封装成对象,保存到tstringlist中,stringlist.strings[0]里面保存了对象的ID(也就是命令的序号,从1..X);然后放一个定时器,定时器1S中去查看命令列表;把第一条命令的stringlist.strings[0]设置为‘0’,如果定时器检查到第一条的这个标志是0,则退出,不处理。证明系统正在处理其中的一条命令。把这个命令发送给子的socketserver; 在clientread里读取数据,然后处理,处理完后,返回信息回去,证明这个命令处理完了,把处理的状态返回给消息发送器。然后调用命令对象里的socket发送给命令发送者,去掉第一条命令。 然后定时器检测到命令存在时,发送命令,设置状态。知道处理完所有的命令。</span></strong>
<pre name="code" class="delphi">procedure write_log(str: string);
var
F: TextFile;
mfile: string;
begin
try
//判断保存日志文件的目录是否存在
if not DirectoryExists(ExtractFilePath(ParamStr(0)) + 'log') then
MkDir(ExtractFilePath(ParamStr(0)) + 'log');
//按日期及时间设定保存日志的文件名
mfile := ExtractFilePath(ParamStr(0)) + 'log\' + formatdatetime('yyyy-mm-dd', now) + '.txt';
AssignFile(F,mfile);
if not FileExists(mfile) then
Rewrite(F);//如果文件不存在,则创建一个新的文件,并写入
Append(F); //追加写入
Writeln(F,str);//写入并换行
CloseFile(F);
except
end;
end;
procedure TfmDKGZT.DJsocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
sReceive, sDJBH: string;
slReceive: TStringList;
begin
// 如果需要做批发,uni_basedatabill里的Execute;重新打开单据上的监听端口;
// 因为每张单据需要一个监听端口,再打开别的单据之前,请关掉别的端口;
// 这个时候需要在每个命令中保存要打开的单据号。
slReceive := TStringList.Create;
sReceive :