winsock 的sendto函数的参数询问(急,在线等)(100分)

  • 主题发起人 主题发起人 powernet
  • 开始时间 开始时间
P

powernet

Unregistered / Unconfirmed
GUEST, unregistred user!
sendto的函数原型如下:
function sendto(s: TSocket; var Buf; len, flags: Integer; var addrto: TSockAddr;
tolen: Integer): Integer; stdcall;

我在调用时,sendto(socketid,sendbuf,packetsize,0,theiraddr,sizeof(theiraddr));
其中sendbuf的类型为tmemorystream,发送后,数据混乱。(sendbuf中的数据已经确认时正确的),看来tmemorystream不能作为缓冲区。

那么,我应该把tmemorystream怎么处理,使得发送数据正常呢。

 
sendbuf 用 sendbuf.Memory
 
怎么不行吗?
var Buf ;这里需要传递的是 实际存储内容的地址值
你用 Sendbuf,传递指针是指向Sendbuf实体的,当然不行
SendBuf.Memory是指向实际存储区的,应该用它(要不就是 sendbuf.memory^,Delphi的指针,我很容易糊涂)

另外,你可以试验用动态数组做参数,
b:array of byte;
用b 或 b[0]做参数,结果不一样的,b[0]是正确的。上面的问题类似

你如果传递 参数 作为buf ,则没有问题,
 
后退
顶部