有哪位有过udpsocket经历的同仁,希望不吝赐教啊,我想知道udpsocket的连接和传输过程,要有代码提示的,最起码要能让人看出确实连上并发送了东西过去,谢谢,50分!

解决方案 »

  1.   

    给你一个udp的例子
    Client端
    var
    c_addr:sockaddr_in;
    s:integer;
    _sndBuf:array[0..9];
    BROADCAST: boolean;begin
      s:=socket(af_inet,sock_dgram,ipproto_ip);
      try
        c_addr.sin_family:=af_inet;
        c_addr.sin_port:=8080;
        c_addr.sin_addr.S_addr:=inet_addr('192.168.0.11'));
        sendto(s,@_sndBuf[0],sizeof(_sndBuf),0,c_addr,sizeof(sockaddr_in));    
      finally
        closesocket(s);
      end;
    end;
    Server端 var Recvsocket:integer;
    var
    _WSAdata:TWSADATA;
    addr:sockaddr_in;
    begin
      wsastartup(makeword(2,2),_WSAdata);
      Recvsocket:=socket(af_inet,SOCK_DGRAM,IPPROTO_IP);
      addr.sin_family:=af_inet;
      addr.sin_port:=8080;
      addr.sin_addr.S_addr:=htonl(INADDR_ANY);
      bind(Recvsocket,addr,sizeof(sockaddr_in));
      wsaasyncselect(Recvsocket,self.Handle,WM_RECV,FD_READ);
    end;
    procedure TFrmMain.RecvData(var msg: Tmessage);
    var
    c_addr:sockaddr_in;
    _Rcvbuf:array[0..9]of char;
    begin
      addr_len:=sizeof(sockaddr_in);
      if recvfrom(Recvsocket,@_Rcvbuf[0],sizeof(_Rcvbuf),0,_sockaddr,addr_len)<> 0 then
      begin
        memo1.lines.add(_Rcvbuf);
      end;
    end;
      

  2.   

    用Delphi干嘛不用Indy组件呢,Search Indy,有详细的例程
      

  3.   

    我搞过Indy的例子,他自己的那个关于tcp的聊天程序都死机,我提了问题在这里,都没有人回答
    http://expert.csdn.net/Expert/topic/1987/1987161.xml?temp=.3724024