今天在写通信时,用TClientSocket 和TServerSocket 控件时,用SendBuf 和 ReceiveBuf发送和接收数据,可是,发送的数据和接收的数据总不对,请高手解决啊!
发送的数据是:
020061616161610000000000000000000000000000006262626262000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
接收的数据是:
0EFC120060FC1200945C490068FC1200AF5C490060FC12006889DC002424DC0024F20200616161616100000000000000000000000000000062626262620000000000000000000000
发送的数据是:
020061616161610000000000000000000000000000006262626262000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
接收的数据是:
0EFC120060FC1200945C490068FC1200AF5C490060FC12006889DC002424DC0024F20200616161616100000000000000000000000000000062626262620000000000000000000000
下面是代码:
procedure TMySocket.ClientSocketRead(Sender: TObject;Socket: TCustomWinSocket);
var
Data :array[0..$FFF]of Byte;
nLen :integer;
nRecvLen :integer;
begin
nLen:=$1000;
nRecvLen:=ClientSocket.Socket.ReceiveBuf(Data,nLen);
MainForm.Memo1.Lines.Add(HexDataToHexStr(@aData[0],nRecvLen));//将数组里面的内容读出来!
if nRecvLen > 0 then
begin
DispathData(@Data[0],nRecvLen);
end;
end;
郁闷,是DELPHI的pchar 类型有问题!
郁闷!
举例如下:
下面的情况会出错!就会犯我上面的问题!
procedure MySend(Data :pchar; nLen :integer);
begin
ClientSocket.Socket.SendBuf(Data,nLen);
end;
改为下面代码就不会:
procedure MySend(Data :pchar; nLen :integer);
var
Buf :array[0..$FFFF]of byte;
begin
CopyMemory(@Buf[0],@Data[0],nLen);
ClientSocket.Socket.SendBuf(Buf,nLen);
end;我想大家应该知道 问题出在哪里了吧!不过,还有个问题,请问高手,怎么接帖呢?
是我自己接,还是斑竹来接呢!
procedure MySend(Data :pchar; nLen :integer);
begin
ClientSocket.Socket.SendBuf(Data[0],nLen);
end;
begin
ClientSocket.Socket.SendBuf(Data^,nLen);
end;
为什么只发一个Data[0]?Data[1]和以后的呢?