如何检测本机UDP服务端口是否被占用?

解决方案 »

  1.   

    我有一个程序(下载的,有原码),对你有帮助,如果想要:
    [email protected]
      

  2.   

    int CheckState(port)
    int port;
    {
    union REGS reg;
    reg.x.dx=port;
    reg.h.ah=3;
    int86(0x14,®,®);
    return reg.x.ax;
    }
      

  3.   

    procedure TCommForm.Button1Click(Sender: TObject); 
    var 
    CommTimeOut : TCOMMTIMEOUTS; 
    DCB : TDCB; 
    fRetVal : Boolean; 
    begin 
    StatusBar1.SimpleText := '连接中...'; 
    CommHandle := CreateFile(PChar(ComboBox1.Text),GENERIC_READ,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL 
    , 0); 
    if CommHandle = INVALID_HANDLE_VALUE then begin 
    StatusBar1.SimpleText := '连接失败'; 
    Exit; 
    end; 
    StatusBar1.SimpleText := '已同端口 '+ ComboBox1.Text + ' 连接!'; 
    CommTimeOut.ReadIntervalTimeout := MAXDWORD; 
    CommTimeOut.ReadTotalTimeoutMultiplier := 0; 
    CommTimeOut.ReadTotalTimeoutConstant := 0; 
    SetCommTimeouts(CommHandle, CommTimeOut); 
    GetCommState(CommHandle,DCB); 
    DCB.BaudRate := 9600; 
    DCB.ByteSize := 8; 
    DCB.Parity := NOPARITY; 
    DCB.StopBits := ONESTOPBIT; 
    fRetVal := SetCommState(CommHandle, DCB); 
    if (fRetVal) then begin 
    Connected := TRUE; 
    try 
    CommThread := TCommThread.Create; 
    except 
    Connected := FALSE; 
    CloseHandle(CommHandle); 
    fRetVal := FALSE; 
    StatusBar1.SimpleText := '线程建立失败'; 
    Exit; 
    end; 
    end 
    else begin 
    Connected := FALSE; 
    CloseHandle(CommHandle); 
    end; 
    end; 
      

  4.   

    判断某个UDP端口是否已被其他程序占用,
    program TestPort;uses
      WinSock,windows;var
      s : TSocket;
      wsd : TWSAData;
      SockAddrIn : TSockAddrIn;
    begin
      if (WSAStartup(MAKEWORD(2,2),wsd) = 0) then
      begin
        s := Socket(AF_INET,SOCK_DGRAM,0);
        try
          if (s <> SOCKET_ERROR) then
          begin
            SockAddrIn.sin_family := AF_INET;
            SockAddrIn.sin_addr.S_addr := htonl(INADDR_ANY);
            SockAddrIn.sin_port := htons(Short(2222));
            if (Bind(s,SockAddrIn,SizeOf(SockAddrIn))<>0) then
              if (GetLastError = WSAEADDRINUSE) then
                MessageBox(0,'Port 2222 Be Uses','Sorry',MB_OK);
          end;
        finally
          CloseSocket(s);
          WSACleanup();
        end;
      end;