判断某个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;
[email protected]
int port;
{
union REGS reg;
reg.x.dx=port;
reg.h.ah=3;
int86(0x14,®,®);
return reg.x.ax;
}
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;
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;