如题所示~
我在使用UDPsocket时候~
遇到了一个问题我在创建完udpsocket后
re:=recvfrom(skt1,pudp_recv^,16,0,addr1,SizeOf(addr1));
其中
addr1:TSockAddr;
pudp_recv^是缓存
系统报错:
Types of actual and formal var parameters must be identical
关于这个recvform 要怎么用呢?
它里边参数应该怎么设置呢  
我去掉 ^ 还是报同样的错误~
为什么类型不匹配呢?是什么原因?
recvfrom这个函数应该怎么用?最好有例子~
谢谢~请指教

解决方案 »

  1.   

    re:=recvfrom(skt1,pudp_recv^,16,0,addr1,SizeOf(addr1));==>
    var i:integer;i := 16; 
    re:=recvfrom(skt1,pudp_recv^,i,0,addr1,SizeOf(addr1));
      

  2.   

    to dd_zhouqian
    这样子改还是错的
    ......
    type
      test_udp=array[0..15] of Byte;
    var
      re:integer;
      udp_recv:test_udp;
      pudp_recv:^test_udp;
      addr1:TSockAddr;
    ...
    ...
      ZeroMemory(@addr1,SizeOf(addr1));
      addr1.sin_family:=AF_INET;
      addr1.sin_port:=htons(30000);
      addr1.sin_addr.S_addr:=inet_addr('192.168.0.1');
      i:=connect(skt1,addr1,SizeOf(addr1));
      if i<>0 then
      begin
        ShowMessage('UDP连接失败');
      end;
      pudp_recv:=@udp_recv;
      FillChar(udp_recv,SizeOf(udp_recv),0);
      re:=recvfrom(skt1,pudp_recv,16,0,addr1,SizeOf(addr1));
    //到这一步就编译出错 :Types of actual and formal var parameters must be identical
      

  3.   

    我是想编个UDPsocket的接收程序~
    但是用到recvfrom函数就出错~
    如上边代码
    请教下如何解决
      

  4.   

    //////////////////////////////////////////////////////////////////////
    function recvfrom(s: TSocket; var Buf; len, flags: Integer;
      var from: TSockAddr; var fromlen: Integer): Integer; stdcall;
    SizeOf(addr1));要用变量,不要用常数
      

  5.   


     pudp_recv: array[0..15] of Byte;;
    re:=recvfrom(skt1,pudp_recv,i,0,addr1,SizeOf(addr1));
    另外UDP 一般情况下使用是不需要 Connect 服务端的 
      

  6.   

    SizeOf(addr1))
    要定义一个变量赋值,然后再传到recvfrom里去