在本公司网中用以下查找在线用户不知可否。
unit aa;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, ExtCtrls, CheckLst;type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
ClientSocket1: TClientSocket;
Timer1: TTimer;
Timer2: TTimer;
CheckListBox1: TCheckListBox;
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure Timer1Timer(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
i:integer;
implementation{$R *.dfm}
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText('a');
end;procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorcode:=0;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if i<=100 then
begin
clientsocket1.Close;
clientsocket1.Address:='192.168.245.'+inttostr(i);
clientsocket1.Active:=true;
i:=i+1;
end
else
timer1.Enabled:=false;
end;procedure TForm1.FormActivate(Sender: TObject);
begin
i:=1;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
if timer1.Enabled=false then
begin
i:=1;
timer1.Enabled:=true;
end;
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var i:integer;
begin
if checklistbox1.Count>=1 then
begin
showmessage(checklistbox1.Items.Strings[i]);
for i:=0 to checklistbox1.Count-1 do
begin
if trim(checklistbox1.Items.Strings[i])<>trim(serversocket1.Socket.Connections[0].RemoteHost) then
checklistbox1.Items.Add(serversocket1.Socket.Connections[0].RemoteHost );
end;
end
else
checklistbox1.Items.Add(serversocket1.Socket.Connections[0].RemoteHost );
end;
end.
unit aa;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, ExtCtrls, CheckLst;type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
ClientSocket1: TClientSocket;
Timer1: TTimer;
Timer2: TTimer;
CheckListBox1: TCheckListBox;
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure Timer1Timer(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
i:integer;
implementation{$R *.dfm}
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText('a');
end;procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorcode:=0;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if i<=100 then
begin
clientsocket1.Close;
clientsocket1.Address:='192.168.245.'+inttostr(i);
clientsocket1.Active:=true;
i:=i+1;
end
else
timer1.Enabled:=false;
end;procedure TForm1.FormActivate(Sender: TObject);
begin
i:=1;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
if timer1.Enabled=false then
begin
i:=1;
timer1.Enabled:=true;
end;
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var i:integer;
begin
if checklistbox1.Count>=1 then
begin
showmessage(checklistbox1.Items.Strings[i]);
for i:=0 to checklistbox1.Count-1 do
begin
if trim(checklistbox1.Items.Strings[i])<>trim(serversocket1.Socket.Connections[0].RemoteHost) then
checklistbox1.Items.Add(serversocket1.Socket.Connections[0].RemoteHost );
end;
end
else
checklistbox1.Items.Add(serversocket1.Socket.Connections[0].RemoteHost );
end;
end.
unit aa;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, ExtCtrls, CheckLst;type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
ClientSocket1: TClientSocket;
Timer1: TTimer;
Timer2: TTimer;
CheckListBox1: TCheckListBox;
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure Timer1Timer(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
i:integer;
implementation{$R *.dfm}
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText('a');
end;procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorcode:=0;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if i<=100 then
begin
clientsocket1.Close;
clientsocket1.Address:='192.168.245.'+inttostr(i);
clientsocket1.Active:=true;
i:=i+1;
end
else
timer1.Enabled:=false;
end;procedure TForm1.FormActivate(Sender: TObject);
begin
i:=1;
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
if timer1.Enabled=false then
begin
i:=1;
timer1.Enabled:=true;
end;
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var i:integer;
begin
if checklistbox1.Count>=1 then
begin
showmessage(checklistbox1.Items.Strings[i]);
for i:=0 to checklistbox1.Count-1 do
begin
if trim(checklistbox1.Items.Strings[i])<>trim(serversocket1.Socket.Connections[0].RemoteHost) then
checklistbox1.Items.Add(serversocket1.Socket.Connections[0].RemoteHost );
end;
end
else
checklistbox1.Items.Add(serversocket1.Socket.Connections[0].RemoteHost );
end;
end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, NMUDP, StdCtrls, WinSock;type
TfmMain = class(TForm)
NMUDP: TNMUDP;
mmList: TMemo;
Label1: TLabel;
procedure NMUDPDataReceived(Sender: TComponent; NumberBytes: Integer;
FromIP: String; Port: Integer);
procedure FormShow(Sender: TObject);
procedure FormClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure BroadCast(StrMsg, strIP: string);
procedure DeleteWhereIP(StrIP: string);
function MyComputerName: string;
function GetLocalIP: string;
function ExistsIP(StrIP: string): boolean;
public
{ Public declarations }
StrBIP: string;
end;var
fmMain: TfmMain;implementation{$R *.dfm}{ TForm1 }procedure TfmMain.BroadCast(StrMsg, strIP: string);
var
mms: TMemoryStream;
begin
with NMUDP do
begin
ReportLevel := Status_Basic;
if strIP = '' then
RemoteHost := StrBIP
else
RemoteHost := StrIP;
RemotePort := 6767;
mms := TMemoryStream.Create;
try
mms.Write(StrMsg[1], Length(StrMsg));
NMUDP.SendStream(mms);
finally
mms.Free;
end;
end;
end;procedure TfmMain.DeleteWhereIP(StrIP: string);
var
i: integer;
begin
for i := 0 to mmList.Lines.Count - 1 do
begin
if Copy(mmList.Lines.Strings[i], 4, Pos(';', mmList.Lines.Strings[i]) - 4) = StrIP then
begin
mmList.Lines.Delete(i);
Break;
end;
end;
end;procedure TfmMain.NMUDPDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
mms: TMemoryStream;
StrCName, StrTemp: String;
begin
mms := TMemoryStream.Create;
try
NMUDP.ReadStream(mms);
mms.Position :=0;
SetLength(StrCName, NumberBytes);
mms.Read(StrCName[1], NumberBytes);
StrTemp := Copy(StrCName, 1, 1);
if StrTemp = '0' then
begin
if (GetLocalIP <> FromIP) and (not ExistsIP(FromIP)) then
BroadCast('0' + MyComputerName, FromIP);
if not ExistsIP(FromIP) then
mmList.Lines.Add('IP:' + FromIP + '; Computer Name: ' + Copy(StrCName, 2, Length(StrCName) - 1));
end else
DeleteWhereIP(FromIP);
finally
mms.Free;
end;
end;procedure TfmMain.FormShow(Sender: TObject);
begin
BroadCast('0' + MyComputerName, '');//0代表启动
end;procedure TfmMain.FormClick(Sender: TObject);
var
a: array[0..MAX_COMPUTERNAME_LENGTH]of Char;
n: dword;
begin
n := MAX_COMPUTERNAME_LENGTH;
a := 'a';
GetComputerName(a, n);
mmList.Lines.Add(a)
end;function TfmMain.MyComputerName: string;
var
CName: array[0..MAX_COMPUTERNAME_LENGTH]of Char;
n: DWORD;
begin
n := MAX_COMPUTERNAME_LENGTH;
GetComputerName(CName, n);
Result := CName;
end;procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
BroadCast('1' + MyComputerName, '');//1代表关闭
end;function TfmMain.GetLocalIP: string;
var
wVersionRequested: WORD;
wsaData: TWSAData;
p: PHostEnt;
s: array[0..128] of Char;
begin
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
try
GetHostName(@s, 128);
p := GetHostByName(@s);
{Get the IpAddress}
Result := StrPas(iNet_ntoa(PInAddr(p^.h_addr_list^)^));
finally
WSACleanup
end
end;function TfmMain.ExistsIP(StrIP: string): boolean;
var
i: integer;
begin
Result := False;
for i := 0 to mmList.Lines.Count - 1 do
begin
if Copy(mmList.Lines.Strings[i], 4, Pos(';', mmList.Lines.Strings[i]) - 4) = StrIP then
begin
Result := True;
Break;
end;
end;
end;procedure TfmMain.FormCreate(Sender: TObject);
var
StrTemp: string;
i: integer;
begin
StrTemp := GetLocalIP;
for i := 0 to 2 do
begin
StrBIP := StrBIP+ Copy(StrTemp, 1, Pos('.', StrTemp) - 1) + '.' ;
Delete(StrTemp, 1, Pos('.', StrTemp));
end;
StrBIP := StrBIP + '255';
end;end.