求一个socket服务器监听端口的delphi源码,最好是用api函数写的,控件做的也行,贴到这里或者发到[email protected]里均可,能实现就给分!

解决方案 »

  1.   

    摘要点使用  UDP 的代码给你吧
    procedure TGMain.N2Click(Sender: TObject);
    var
      Fsession  : TWSAdata;
      protoent  : PProtoEnt;
      saddr     : TsockAddrIn;
    begin
      try
        //WSAstartup
        if(WSAstartup(Makeword(2,2),Fsession)<>0) then
        begin
          showmessage('初始化winsock动态连接库失败');
          Exit;
        end;
        protoent:= getprotobyname('udp');    saddr.sin_family  := AF_INET;
        saddr.sin_port    := htons(lport);
        saddr.sin_addr.S_addr := htonl(INADDR_ANY);    //create socket
        Fsocket := socket(PF_INET,SOCK_DGRAM,protoent^.p_proto);
        if Fsocket = INVALID_SOCKET then
        begin
          showmessage('建立socket失败');
          Exit;
        end
        else if(Fsocket>=0) then                                             //bind
        begin
          if Bind(Fsocket,saddr,sizeof(saddr))= SOCKET_ERROR then
          begin
            showmessage('绑定socket失败');
          end
          else
          begin
            GMain.Memo1.Lines.Add('Start');
            GprsThread := TudpThread.Create(false);
          end;
        end;
      Except
      end;
    end;
    ----------------------
    接收:
    RecLen := recvfrom(FSocket,RecBuf,512,0,Client,SAddrLen);
    if(RecLen>0)
    ...
    -------------------
    发送:
    var
       Client : SockAddr_In ;
    ...
        Client.sin_family := AF_INET;
        Client.sin_port := htons(10000);
        Client.sin_addr.S_addr := inet_addr('192.168.0.13');
    ...
        sAddrLen := sizeof(Client);
          sndLen := sendto(FSocket,SndBuf,512,0,Client,sAddrLen);  //512是buf的长度
          if(SndLen<0) then
            ..
          else 
      

  2.   

    使用socket 感觉vc和Delphi差不多
      

  3.   

    http://www.programfan.com/club/showbbs.asp?id=71323
      

  4.   

    aiirii(ari-淘金坑) 你给的是D的例子啊
      

  5.   

    我也想知道!帮你顶给我一份[email protected]