M
mao
Unregistered / Unconfirmed
GUEST, unregistred user!
在开发一个程序与unix主机程序通信的时候,采用tcp链接。
pc机上为客户端,只有采用阻赛模式与服务器通信。可是老是收不到东西。
程序是这样的。
接收线程:
procedure CRecv.Execute;
var
recvbuf:SRecvedByRop;
BodyLen,headlen:Integer;
begin
{ Place thread code here }
while not Terminated do
begin
if not dm.TcpCMain.Connected then
Terminate
else
try
with dm.TcpCMain do
begin
headlen:=SNOC_H_len;
ReadBuffer(recvbuf.head,headlen);
BodyLen:=recvbuf.Head.ucMessagelen-5;//得到信息长度
if (bodylen>0) then
ReadBuffer(recvbuf.msg,bodylen);
end;
dm.dealRecv:=recvbuf;
//以下要求触发事情,让主处理器处理接收到的事情。
postmessage(Form1.Handle,Mw_RecvFinsh,1,0);
except
end;
end; // and while
end;
创建线程是这样的:
procedure Tdm.BegToDothing;
begin
TcpCMain.Host:=Server;
TcpCMain.Connect(-1);
ostate.showState('begin to connect server...');
stnRecv:=CRecv.Create(false);
stnRecv.FreeOnTerminate:=True;
end;
SRecvedByRop的结构是
SRecvedByRop= packed record
head: snoc_h;
msg :msg_f;(msg_f是一个结构类型)
end;
pc机上为客户端,只有采用阻赛模式与服务器通信。可是老是收不到东西。
程序是这样的。
接收线程:
procedure CRecv.Execute;
var
recvbuf:SRecvedByRop;
BodyLen,headlen:Integer;
begin
{ Place thread code here }
while not Terminated do
begin
if not dm.TcpCMain.Connected then
Terminate
else
try
with dm.TcpCMain do
begin
headlen:=SNOC_H_len;
ReadBuffer(recvbuf.head,headlen);
BodyLen:=recvbuf.Head.ucMessagelen-5;//得到信息长度
if (bodylen>0) then
ReadBuffer(recvbuf.msg,bodylen);
end;
dm.dealRecv:=recvbuf;
//以下要求触发事情,让主处理器处理接收到的事情。
postmessage(Form1.Handle,Mw_RecvFinsh,1,0);
except
end;
end; // and while
end;
创建线程是这样的:
procedure Tdm.BegToDothing;
begin
TcpCMain.Host:=Server;
TcpCMain.Connect(-1);
ostate.showState('begin to connect server...');
stnRecv:=CRecv.Create(false);
stnRecv.FreeOnTerminate:=True;
end;
SRecvedByRop的结构是
SRecvedByRop= packed record
head: snoc_h;
msg :msg_f;(msg_f是一个结构类型)
end;