求一个用Idudpserver写的检测客户端是否在线的源码[email protected]
解决方案 »
- D7,在某个文本文件中找某串字符串,如果找到就退出,找不到就再找另外一个字符串,然后将该字符串删除,再添加新字符串进去,然后保存
- dear all :我想判断字符串'hello' 是否在集合 ['hello','world','god']里面,用了如下语句,错误的说,请赐教
- 请问dbGridEh的显示的某字段如何让鼠标放上去的时候显示该字段全部内容?
- 老问题 请教表中重复字段的问题 谢谢!!!
- 关于adotable查询
- 关于treeview的问题,大家看看我的代码,请进
- QuickRep中放置QRExpr控件,在编辑统计函数时可它就是找不到我放在 DataModule 中的Query---------------------------------------------
- 寻找琪琪,40star,知情者有重分酬谢!!!GZ,UP者均有分!
- 大家帮助我好吗,很急...................
- DBF数据库不能物理删除记录?
- 请问去那里下载Raize Components ?????急……
- 一个保存的问题?
最好在局域网内调试,如果只有一台机器,你就看先打开的程序,后打开的由于同ip登录的回应消息我屏蔽了,所以看不到
================================================
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdUDPClient, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPServer,IdSocketHandle;type
TForm1 = class(TForm)
server: TIdUDPServer;
client: TIdUDPClient;
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure serverUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses Winsock;
{$R *.dfm}
var Ip:string;
function LocalIP : string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe:PHostEnt;
pptr:PaPInAddr;
Buffer:array [0..63] of char;
I:Integer;
GInitData:TWSADATA;
begin
WSAStartup($101, GInitData);
Result := '';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
end;
function BroadAddr(addr:string):string;
var i:integer;
begin
result:='';
for i:=length(addr) downto 1 do
begin
if ord(addr[i])=46 then
begin
result:=copy(addr,1,i)+'255';
exit;
end;
end;
end;
procedure TForm1.serverUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var LogMessage:string;
DataStringStream: TStringStream;
s:string;
begin
DataStringStream:=TStringStream.Create('');
DataStringStream.CopyFrom(AData, AData.Size);
s:=DataStringStream.DataString;
if byte(s[1])=1 then
begin
LogMessage:=#2;
Client.Send(Ip,8880,LogMessage);
listbox1.Items.Add(abinding.PeerIP);
end;
if byte(s[1])=2 then
begin
if abinding.PeerIP=LocalIP then exit;
listbox1.Items.Add(abinding.PeerIP);
end;
if byte(s[1])=0 then
begin
listbox1.Items.Delete(listbox1.Items.IndexOf(abinding.peerIP));
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var LogMessage:string;
ip:string;
begin
server.Active:=true;
client.Active:=true;
ip:=LocalIP;
LogMessage:=#1;
Client.Send(BroadAddr(ip),8880,LogMessage);end;procedure TForm1.Button2Click(Sender: TObject);
var LogMessage:string;
ip:string;
begin
ip:=LocalIP;
LogMessage:=#0;
Client.Send(BroadAddr(ip),8880,LogMessage);end;procedure TForm1.FormCreate(Sender: TObject);
var port:integer;
begin
port:=strtoint(inputbox('输入端口号!','','8880'));
client.Port:=port;
server.DefaultPort:=port;
client.Active:=true;
server.Active:=true;
end;end.