Socket传送大于4096的数据问题?(300分)

  • 主题发起人 主题发起人 Kent
  • 开始时间 开始时间
K

Kent

Unregistered / Unconfirmed
GUEST, unregistred user!
客户端:
procedure TForm1.BitBtn3Click(Sender: TObject);
var
Stream:TMemoryStream;
Stream_size:integer;
begin

Stream:=TMemoryStream.Create;


for i:=1 to 100 do
begin
Sendstrings.pz_id:=i;
Sendstrings.jc_ip:=i;
Sendstrings.pz_cs:=i;
Sendstrings.jc_dns:='0123456789012345678901234567890123456789';
Stream.Write(Sendstrings.pz_id,4);
Stream.Write(Sendstrings.jc_ip,4);
Stream.Write(Sendstrings.jc_dns,40);
Stream.Write(Sendstrings.pz_cs,4);
end;

Stream.Position:=0;
ClientSocket1.Socket.SendStream(Stream);




end;

服务器端:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Stream:TMemoryStream;
Receivestrings:struct_rec;
begin
while Socket.ReceiveLength>0 do
begin
memo1.Lines.Add(Receivestrings.jc_dns);
Socket.Receivebuf(Receivestrings.pz_id,4);
Socket.Receivebuf(Receivestrings.jc_ip,4);
Socket.Receivebuf(Receivestrings.jc_dns,40);
Socket.Receivebuf(Receivestrings.pz_cs,4);
end;
end;

现在发现socket数据缓冲为4096Bytes,当客户端发送数据大于4096时,如果一个记录
长度为64(正好是4096的因子),则接受正常...

而现在记录长度为52,所以发送到第78条时,剩下了一小段,52*78=4056<4096,再接受第
79条时,数据接受的就不对了,请问如何处理这种大数据量的传送....

 
未处理完的数据要保存起来,然后把后面接收的数据加进来
 
谁有Client用blocking,Server用stThreadBlocking,方式传送大数据量记录型数据的源码?
最近想研究研究这方面的东西,想找个源码好好抠一抠...谁有请给我传一份..

注意:1.要传记录型的:因为我想看看是如何把流转成记录的...
2.要大数据量的:因为我想看看数据超出8192后是怎样处理的?
3.要阻塞方式的:Client用blocking,Server用stThreadBlocking.....

谢谢了...
 
我曾经写过,要不要源码
 
谢谢!!!万分感谢!!!
请给我一份好吗?
 
to R_Baggio :
我也正在做类似的东西,能让我学习一下吗? iusedelphi5@sina.com
 
我也要一份,呵呵yzg8888@371.net
 
我没做,能让我学习一下吗?
wumengs@sina.com.cn
 
R_Baggio 给我一份好吗 谢谢
good@nbnet.com.cn
 
问题解决了吗?请继续
 
多人接受答案了。
 
你好,R_Baggio,现阶段我正在研究socket编程,能不能也给我一份
 
你好, r-baggio,我的信箱地址是tp188@163.com
 
TO R_baggio:
你好,我也想要一份Client用blocking,Server用stThreadBlocking,方式传送
大数据量记录型数据的源码资料.e-mail:zhenghui8101@21cn.com.谢谢!
 
后退
顶部