如何知道一个Socket端口已经被使用了(100分)

  • 主题发起人 主题发起人 天外客
  • 开始时间 开始时间

天外客

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我要编一个程序,如果一个端口被占用了,就使用另一个端口
如何知道一个Socket端口已经被使用了
 
看看行不行。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ServerSocket1: TServerSocket;
Timer1: TTimer;
Memo1: TMemo;
procedure Timer1Timer(Sender: TObject);
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
var
I : integer;
begin
Memo1.Clear;

for I := 0 to 1024 do
begin
ServerSocket1.Close;
ServerSocket1.Port := I;
try
ServerSocket1.Open;
except
Memo1.Lines.Add(IntToStr(I) + '端口打开!');
end;
end;
Timer1.Enabled := FALSE;
end;



procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ERRORCODE:=0;//防止报错
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled :=TRUE;
end;

end.
 
要不要API的代码?要的话说一声。
 
我要的,有没有没?
 
to zbwsh: 太土了,这种方法怎么能用呢
to sachow: 我要源吗,发一个给我看看吧,若可以我把分给你了
 
1、如果能绑定哪个端口,说明就可以用
2、如果绑定的端口号为0,那么系统会给你分配一个没人用的端口号
 
我不能全面的对你的问题提供答案,但可以给你提供些思路:
1:要知道哪些端口已经被使用,并且连接的协议等等信息,属于网络管理协议Snmp部分,具体的
你可以查查相关的资料,在windows环境下主要是采用snmpapi.dll,inetmib1.dll提供的Api函数,比如:
SnmpExtensionInit; external miblib name 'SnmpExtensionInit';
function SnmpExtensionInitEx;
function SnmpExtensionQuery;
function SnmpExtensionQueryEx;
function SnmpExtensionTrap;
procedure SnmpExtensionClose;
function SnmpUtilOidCpy;
function SnmpUtilOidAppend;
function SnmpUtilOidNCmp
function SnmpUtilOidCmp;
procedure SnmpUtilOidFree;
function SnmpUtilOctetsCmp;
function SnmpUtilOctetsNCmp;
function SnmpUtilOctetsCpy;
procedure SnmpUtilOctetsFree;
function SnmpUtilAsnAnyCpy;
procedure SnmpUtilAsnAnyFree;
function SnmpUtilVarBindCpy;
procedure SnmpUtilVarBindFree;
function SnmpUtilVarBindListCpy;
procedure SnmpUtilVarBindListFree;
procedure SnmpUtilMemFree;
function SnmpUtilMemAlloc;
function SnmpUtilMemReAlloc;
function SnmpUtilOidToA;
... ... 你去查一下他们的用法,肯定可以完美的解决你的问题
 
后退
顶部