我最近在做一个B/S系统的安装程序,我给自己的APACHE也一起打包,在安装的时候给自己的APACHE服务开辟一个新的端口,安装用户可以自己指定一个端口,但我的安装程序需要检测这个新的端口是否被系统的其他服务所占用。

解决方案 »

  1.   

    对于DELPHI来说,不知道怎样具体的bind?  又怎样解除bind?
      

  2.   

    在程序-〉运行-〉dos下,敲netstat,可以查看你的计算机打开了什么端口,至于在你的程序中判断,我没试过,你可以试着在程序中调用dos,比如用winExec函数
      

  3.   

    SockAddr.sin_family := AF_INET;
            SockAddr.sin_addr.S_addr := htonl(INADDR_ANY);
            SockAddr.sin_port := htons(Port);        if bind(S, SockAddr, SizeOf(SockAddr)) <> SOCKET_ERROR then
            begin
              Ok := True;
              Break;
            end;
      

  4.   

    fjyhs(辉辉) :
        winExec等函数都返回不了我想要的结果啊!
        sundayboysII(空)说的应该很有道理,不过没做过,不知道有没有一些例程代码什么的参考一下!
      

  5.   

    erace99(龙行天下) 的代码试了一下,我是这样改写的,不过不管怎样,都是返回不成功!procedure TForm1.Button1Click(Sender: TObject);
    var
      SockAddr:TSockAddr;
    begin        SockAddr.sin_family := AF_INET;
            SockAddr.sin_addr.S_addr := htonl(INADDR_ANY);
            SockAddr.sin_port := htons(1095);        if bind(ServerSocket1.Socket.SocketHandle, SockAddr, SizeOf(SockAddr)) <> SOCKET_ERROR then
            begin
              //Ok := True;
              showmessage('y');
              //Break;
            end
            else
            begin
              showmessage('n');
            end;end;
      

  6.   

    你初始化了winsock了吗????
    wd:wsadata;
    wsastartup(2,wd);
      

  7.   


      function CheckFreePort(APort : Integer) :Boolean;
      var
        Wsd: WSAData;
        S: TSocket;
        SockAddr: TSockAddrIn;
      begin
        Result := Flase;
        if WSAStartup(MAKEWORD(2, 2), Wsd) <> 0 then Exit;
        try
          S := socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
          if S = SOCKET_ERROR then Exit;      SockAddr.sin_family := AF_INET;
          SockAddr.sin_addr.S_addr := htonl(INADDR_ANY);
          SockAddr.sin_port := htons(APort);      if bind(S, SockAddr, SizeOf(SockAddr)) <> SOCKET_ERROR then
            begin
              Result := True;
              Break;
            end;
          end;
          closesocket(S);
        finally
          WSACleanup;
        end;
    end;
      

  8.   

    还是检测不出来,这回返回的全是TRUE!
      

  9.   

    erace99(龙行天下) :
    你新发的代码我试了,其中不管什么端口,
    bind(S, SockAddr, SizeOf(SockAddr))总是等于-1,不知是何故?