请问,如何判断某一端口号已经被其他程序占用(200分)

  • 主题发起人 主题发起人 whitelion
  • 开始时间 开始时间
W

whitelion

Unregistered / Unconfirmed
GUEST, unregistred user!
我看kv3000带的反黑王能够看到计算机的端口占用情况,这是如何实现的
 
你在该端口绑定Socket,若返回错误则说明该端口已经绑定了。
 
用它的时候出错!
 
如果绑定的端口号为0,那么系统会给你分配一个没人用的端口号
 
for 循环搞定
 
IPTools可以显示出来所有的端口的使用情况,
现实的很快,好像不是扫描的
 
兄弟们能写点代码给我吗
 
先读注册表得到有几个端口,然后用个循环一个一个open,异常处理里面填个'被占用'这类的话。
 
看api关于createfile

 
我这里有个办法,不是很精巧,但在使用TServerSocket(或TClientSocket)的情况下却是
没有办法的办法。由于控件在打开端口时已经调用了WSAGetLastError(),所以我无法通过自
已调用这个函数来获取错误结果了,只能从Exception的Message里取得。
//下面的代码需要引用WinSock单元
procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Port := StrToInt(Edit1.Text);
try
ServerSocket1.Open;
except
on E: ESocketError do
begin
if (Pos(IntToStr(WSAEADDRINUSE), E.Message)>0) then
MessageBox(Handle, '端口已被占用!', 'SockServer', MB_ICONERROR);
end;
end;
end;
上面的程序也是能够正常获取结果的,但如果使用WinSock API来编写程序,就可以通过
WSAGetLastError()来获取更精确的结果,但估计多数人是不喜欢使用API来编写Socket程序
的(我喜欢)。
 
GetTcpTable
GetUdpTable
 
继续讨论
 
同意NewCan的建议!
可参照:
http://wwwstud.rz.uni-leipzig.de/~soz97dcx/netstat.htm
 
还有别的方法吗
 
后退
顶部