如何正确地连续发送数据???

lOgpIe 2003-08-25 12:21:45
这是发送线程部分代码:
FRet:=WSASend(tmpSocket,@FWSABUF,1,byts,Flags,@FOverLap,nil);
BytesSent:=Byts;
if GlaEvent<>0 then
begin
if BytesSent=260 then SetEvent(GlaEvent); //260是我的一个数据包的大小
end; 如果数据发出去了就发信号
通知移动数据库记录位置


这是连续发送RECORD的程序段,GLAEVENT在FD_READ消息时CREATE:
frmMain.UserTable.Locate('User',FStr2,[]);
frmMain.URLTable.First;
for i:=0 to frmMain.URLTable.RecordCount -1 do
begin
newURL:=frmMain.URLTable.Fields[2].AsString;
oldURL:=frmMain.URLTable.Fields[1].AsString;
Pooler.RunActiveThreads(1,IP,ACPSocket,DataBuf,XX_DB_FILE_REAL,'','',overlap);
while true do
begin
WaitForSingleobject(GlaEvent,20); //这里如果该成INFINITE就只能发送第一条记录
frmMain.URLTable.Next;
ResetEvent(GlaEvent);
break;
end;
end;
Closehandle(GlaEvent);
end;

而接受数据时只能接受到第1条和第3条,其他的都接受不到,发送端用的EVENTSELECT,接受段用的完成端口
我想引起问题的可能是发送数据的速度赶不上记录移动的速度
所以用了EVENT来控制移动,稍微好了一点,能接受两条了,但就算我把20改成其他的等待时间,耶还是只能接受到这两条
不知该怎么样写....我不想用SQL... : )

关闭NAGLE算法也没用
...全文
58 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zihan 2003-10-03
  • 打赏
  • 举报
回复
还有你是单线程还是多线程同时发送的啊
Skt32 2003-10-03
  • 打赏
  • 举报
回复

可能是接收的问题,收第一个包的时候,把一,二两包都收了,只取了第一包。
你调一下第一包RECV时返回的字节数。

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧