当用TClientSocket向TServerSocket发送数据时,如果发送太快的时候会令二者重叠在一起..就是将前后二个内容组成一个包接收。。像这样的情况应该怎么处理。我看了一下旧贴子。除了下面这种还有没有其他的方法呀。。
6 楼cjf1009(农民程序员)回复于 2005-07-14 10:11:18 得分 5确实会这样的,你可以这样接收
while Socket.ReceiveLength<SizeOf(TBLOCK) do
begin
application.ProcessMessages;
end;
Socket.ReceiveBuf(BLOCK,SizeOf(TBLOCK));
6 楼cjf1009(农民程序员)回复于 2005-07-14 10:11:18 得分 5确实会这样的,你可以这样接收
while Socket.ReceiveLength<SizeOf(TBLOCK) do
begin
application.ProcessMessages;
end;
Socket.ReceiveBuf(BLOCK,SizeOf(TBLOCK));
解决方案 »
- 接口问题:为什么不能用as
- MaskEdit的EditMask?
- 怎么根据字符串如'2002-12'得到下一月月份的字符串(即'2003-01')
- 谁能想到办法用语句来控制BDE administrator的配置,主要是改变configuration中dbase表的level参数
- 居然会这样
- DBNavigator能改成中文的吗?
- 急急!!!!请问TGIF控件哪儿有下????
- 怎么总提示"parameter对象被子不正确的定义,提供了不一致或不完整的信息"
- Delphi中出现([Fatal Error] Internal error: BC2241)!!!!
- 急需求教,保证加分!请来
- 开发过三层系统的都进来看看
- d7+access 2003 求查询语句
http://forum.csdn.net/PointForum/Forum/UserTopicList.aspx?type=TopicUserJoined&user=unsigned§ionId=86fda20c-918f-4004-9a60-83ac6156c017
var
ii:integer;
Sqlstr,Sj,url:string;
a:array of byte;
iLen: Integer;
begin
Sj:=datetimetostra;
try
{ if Datamo.ClientSocket1.Active then
Datamo.ClientSocket1.Socket.SendText('sdsad'); //将得到的传递给中间部门 }
Sqlstr:='随便内容'
iLen:=Length(Sqlstr);
//a:=PChar(Sqlstr);
SetLength(Sqlstr,iLen);
if Not SendBuffer(PChar(Sqlstr),sizeof(iLen),Datamo.ClientSocket1.socket) then Exit;
为什么另一边接收的时候是空值呢??
var
P: PChar;
iLen,iSent: Integer;
begin
Assert(Buffer<>Nil);
Assert(Socket<>Nil);
Result := false;
if Not Socket.Connected then Exit;
P := Buffer;
iLen := BufferLen;
while iLen>0 do
begin
iSent := Socket.SendBuf(p^,iLen);
if iSent <= 0 then Exit;
Inc(p,iSent);
Dec(iLen,iSent);
end;
Result := true;
end;我应该怎么调用这个函数发送呀