const
MAX_PACKETSIZE = 2048;
type
PDataHeader = ^TDataHeader;
procedure RECV;
var
Hdr: PDataHeader;
Buffer: array [0..MAX_PACKETSIZE - 1] of Char;
begin
FillChar(Buffer, MAX_PACKETSIZE, 0);
Hdr := Pointer(@Buffer);
Socket.ReceiveBuf(Hdr^, SizeOf(TDataHeader)); //先接收包头,包头中含有包长度信息
Socket.ReceiveBuf((Buffer + SizeOf(TDataHeader))^, Hdr^.iLen - SizeOf(TDataHeader));//就是执行到上面这句弹出了对话框报错
windows socket error:由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。(10055),on API‘recv’
不知问题出在哪
MAX_PACKETSIZE = 2048;
type
PDataHeader = ^TDataHeader;
procedure RECV;
var
Hdr: PDataHeader;
Buffer: array [0..MAX_PACKETSIZE - 1] of Char;
begin
FillChar(Buffer, MAX_PACKETSIZE, 0);
Hdr := Pointer(@Buffer);
Socket.ReceiveBuf(Hdr^, SizeOf(TDataHeader)); //先接收包头,包头中含有包长度信息
Socket.ReceiveBuf((Buffer + SizeOf(TDataHeader))^, Hdr^.iLen - SizeOf(TDataHeader));//就是执行到上面这句弹出了对话框报错
windows socket error:由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。(10055),on API‘recv’
不知问题出在哪
Hdr^.iLen 大小是20 。 而我的缓冲是2048 ,为什么会 缓冲不足了
i:=Socket.ReceiveLength;
if i<SizeOf(TDataHeader) Then
exit;
基本上还能凑合着用。
我现在就想把A类的对象a发送出去,因为SizeOf(A)得到的是4 就不正确了。