需要发送的内容是:
0X00 01 1E 0F 00 3C 00 00 ......
0X01 .......................................发送部分!
var a:array of byte;
SetLength(a,180);a[0]:=$01;
a[1]:=$1E;
......
ClientSocket.socket.sendbuf(a,sizeof(a));
发现发送的数据变掉了,SNIFFER看到的是04 26 D0 00 FC F6 ...而且长度也变了,最后面有FF FF,奇怪了!
怎么会发送的内容会有变化呀?
0X00 01 1E 0F 00 3C 00 00 ......
0X01 .......................................发送部分!
var a:array of byte;
SetLength(a,180);a[0]:=$01;
a[1]:=$1E;
......
ClientSocket.socket.sendbuf(a,sizeof(a));
发现发送的数据变掉了,SNIFFER看到的是04 26 D0 00 FC F6 ...而且长度也变了,最后面有FF FF,奇怪了!
怎么会发送的内容会有变化呀?
发送第一个包多了 00 00;发送第二个包少了一断 90 6D AD 00 27 1F CA 6B;
function SendBuffer(Buffer:Pchar;BufferLen: Integer;Socket:TCustomWinSocket):Boolean;
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;function RecvBuffer(Buffer:Pchar;BufferLen: Integer;Socket:TCustomWinSocket):Integer;
var
P: PChar;
iNeedRecv,iRecved: Integer;
begin
Assert(Buffer<>Nil);
Assert(Socket<>Nil);
Result := 0;
if Not Socket.Connected then Exit;
P := Buffer;
iNeedRecv := BufferLen;
while iNeedRecv>0 do
begin
iRecved := Socket.ReceiveBuf(p^,iNeedRecv);
if iRecved <= 0 then Exit;
Inc(Result);
Inc(p,iRecved);
Dec(iNeedRecv,iRecved);
end;
end;var a:array of byte;
iLen: Integer;iLen := 180;
SetLength(a,iLen); a[0]:=$01;
a[1]:=$1E;
......
if Not SendBuffer(PChar(@iLen),sizeof(iLen),ClientSocket.socket) then Exit;
//ClientSocket.socket.sendbuf(a,sizeof(a));
if Not SendBuffer(PChar(@a[0]),Length(a) * sizeof(a[0]),ClientSocket.socket) then Exit;接收端,也先接收一个integer(四个字节)作为实际长度,然后再根据该长度值继续接收数据,收完以后接着又是接收长度...数据...
我每次发送都sleep(2000);
但是比较奇怪的是第一包多,第二包少,暂时测试的情况是这样的,楼上兄弟不知道,是否可以解释?
Socket.SendText
SendText发送的 也没遇到过这样的问题啊
function SendBuffer(Buffer:Pchar;BufferLen: Integer;Socket:TCustomWinSocket):Boolean;
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;
if Not SendBuffer(PChar(@a[0]),sizeof(a[0]),ClientSocket1.socket) then Exit;
sleep(2000);
两个包一个也没有发送!if Not SendBuffer(PChar(@iLen),sizeof(iLen),ClientSocket.socket) then Exit;
//ClientSocket.socket.sendbuf(a,sizeof(a));
if Not SendBuffer(PChar(@a[0]),Length(a) * sizeof(a[0]),ClientSocket.socket) then Exit;
红色部分怎么回事情,没有理解!
if Not SendBuffer(PChar(@a[0]),sizeof(a[0]),ClientSocket1.socket) then Exit;
sleep(2000);if Not SendBuffer(PChar(@b[0]),sizeof(b[0]),ClientSocket1.socket) then Exit;
sleep(2000);
两个包一个也没有发送! if Not SendBuffer(PChar(@iLen),sizeof(iLen),ClientSocket.socket) then Exit;
//ClientSocket.socket.sendbuf(a,sizeof(a));
if Not SendBuffer(PChar(@a[0]),Length(a) * sizeof(a[0]),ClientSocket.socket) then Exit;
红色部分怎么回事情,没有理解!
发送第二个包少了一段90 6D AD 00 27 1F CA 6B。两个包发送都不一样,COMMVIEW里面的内容是这样的!
搞不清楚什么原因了!
0x0010 90 6D AD 00 5E 8A C8 6B-96 06 06 00 44 36 CA 6B
0x0020 96 06 06 00 01 00 00 00-90 6D AD 00 27 1F CA 6B
0x0030 F1 43 40 00 01 00
第二个包发送缺红色的内容!
0x0000 01 C9 00 45 00 01 1C 00-3A 33 ED 7E 00 00 00 00
0x0010 90 6D AD 00 5E 8A C8 6B-96 06 06 00 44 36 CA 6B
0x0020 96 06 06 00 01 00 00 00-
90 6D AD 00 27 1F CA 6B F1 43 40 00 01 00
和上面的0x0010部分重复,是否是原因呀,另外一个包用你的方法测试会多一个00 00
sizeof(b[0])*Length(b)
sleep(2000); if Not SendBuffer(PChar(@b[0]),sizeof(b[0])*Length(b),ClientSocket1.socket) then Exit;
sleep(2000);
第二个用*length(b),第一个没有怎么解释呀?另外我发送固定长度也有问题呀!ClientSocket1.socket.SendBuf(a[0],148) ;
sleep(5000); ClientSocket1.socket.SendBuf(b[0],54) ;
sleep(5000); 和使用你的方法一样也是少14个