采用indy的tcpclinet接收server数据的问题,救命呀!(200分)

  • 主题发起人 主题发起人 mao
  • 开始时间 开始时间
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;
 
真的没有人会???
 
遇到过,偷懒开两个SOCK,单收单发,什么原因没细想
 
我最后在cbb中用sock解决了,但是在delphi下无论用sock,还是idtcpclient,
还是没有解决,不死心呀!再提前一把。
想问qsilence,你在delphi下用sock怎么作的,方便的话能不能把有关源码发到我的
信箱uestc_yrq@21cn.com
 
to mao
当时项目紧,没时间细想,用了CLIENT、SERVER各一个,单工方式,
以实现功能为目的,很多地方都没有深究

对不起,由于工程庞大,代码不太方便提供
 
接受数据用TClientSocket的非组塞一样接受呀!
 
非阻塞成功了,就这样结分吧,谢谢两位了
 
多人接受答案了。
 
后退
顶部