procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
buffer:array [0..63] of byte;
len:integer;
begin
len:=64;
ClientSocket1.socket.receivebuf(buffer,len);
AnalyzeFrame(buffer,len);
end;
以上代码是我以前写的,现在发现每次不只收到64字节的数据。怎么取这个Len和这个buffer大小要怎么定义呢?
解决方案 »
- GetSystemMetrics(SM_NETWORK) and $0001 = $0001
- 在delphi中怎样操作dos?
- 请问如何将存储过程的返回结果显示在DBGRID中??
- 在表中逐条追加记录,用table.append方法,可是每次加进去的记录却不一定都是在表尾。为什么?
- 哪里有面向对象pascal基础教程呀
- 请问如何限制ie弹出窗口的数目
- 应该如何实现将DBGrid或StringGrid的显示内容的结果传送到Excel上呢
- 关于制作安装文件的问题!delphi 的安装程序,用什么工具做比较好啊!
- 用Web App Debugger调试好的WebApp如何分发?
- 请教一个关于提高TreeView效率的问题(具有10000个节点以上的)
- socket分段传文件问题请教,急!!!
- 求救如何像360网络连接状态的获得。。
1、按照一楼的说法,循环收取,来者不拒,先收到一个buffer当中;
2、对Buff进行通信协议的扫描,例如什么包头部尾部,或者长度等,发现了合格的包,则处理,否则继续等待收齐。
3、1和2之间的交互写作可以定时,也是1调用2,自己灵活掌握。
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
iLength: Integer;
ABuffer: array of Byte;
begin
iLength:= Socket.ReceiveLength();
SetLength(ABuffer, iLength);
Socket.ReceiveBuf(ABuffer[0], iLength);
AnalyzeFrame(ABuffer, iLength);
SetLength (ABuffer, 0);
end;