用UDP实现局域网广播(100分)

  • 主题发起人 我爱PASCAL
  • 开始时间

我爱PASCAL

Unregistered / Unconfirmed
GUEST, unregistred user!
我编了个聊天程序:
用UDP,但在网上要知道对方的IP,这很麻烦,所以
想用广播将自己IP的发出去,对方收到后就以
把他的IP发给我,如在INTERNET上不行在局域
网中也行,请问如何设置远程计算机IP

 
目的地址全部是1就可以啦。
 
不行,不知在局域网中能否实现,先给五分
 
这很简单,通过UDP控件的DataReceived属性中的FromIP参数便可得到所发送信息的ip地址
 
你没看清我的问题,我连对方IP都不知道,对方亦不知道我的IP,怎能样得到FROMIP?
所以要将我的IP广播出去,局域网中其它机器的聊天程序收到后就可给我发他的IP过来。
 
哈哈,这也简单,你可以在软件中在FORM的ONCREAT事件中随便发送一条指令(上线标
志)到公用的地址中,如果其他人收到该命令了,便通过ini文件寻找判断:如果是新
的用户,便通过FromIP参数得到所发送信息的ip地址,并写入ini文件中。哈哈,这不
就成了?,你可以通过ini文件中的已有的在线用户的ip地址发送信息,当然,在FORM
的ONClose事件中同样发送一条指令(下线标志)到公用的地址以便让其他人知道你下
线了,并写入ini文件中,哈哈,这不就成了?
 
我以前(3/4年前)做过那么个聊天室,和你用几乎一样的方法,后来SOURCE丢了,现在还有人来
报告BUG...
在LAN中可以用广播地址(255.255.255.255)作为IP广播,不过好象D的TUDP不支持;
你可以广播到你自己的网短,即IP的网络号部分为全1:
例如
UR IP MASK BROADCAST ADDR
200.100.100.1 / 255.255.255.0 /200.100.100.255
128.100.100.1 / 255.255.0.0 / 128.100.255.255
 
我的『网聊NetChat』是基于局域网的聊天、传送文件的类QQ的工具,也有聊天室,
支持皮肤更换,支持QQ头像等等,用的就是UDP协议(QQ也是),也可以发广播包
(注:只能在局域网中发广播,你可以想象一下,如果在Internet上也可以发广播包的话
那会是一种什么样的效果?哈...),你可以到我的主页(http://ph11.126.com)上去下载。
获得每个IP的广播地址代码如下(我很早就已放在主页上的编程技巧中了):
13、设置广播IP地址(改自教父的NetICQ程序代码,有人说广播地址不是这样算的,但经我实
验好象还可以,如有更好的方法请告诉我:wind2000@21cn.com)
输入一个IP地址,得到该IP地址所在网段的广播IP地址
function TMainForm.SetGBIp(sIPAddr : string):string;
var
i, j, iHead : Integer;
sHead, s : string;
ai : array[1..3] of integer;
begin
{1~126.255.255.255 (A类网广播地址)
128~191.XXX.255.255 (B类网广播地址)
192~254.XXX.XXX.255 (C类网广播地址)}
j := 1;
for i := 0 to Length(sIPAddr)do
begin
if sIPAddr = '.' then
begin
ai[j] := i;
Inc(j);
end;
if j > 3 then
break;
end;
sHead := Copy(sIPAddr, 1, ai[1] - 1);
iHead := StrToInt(sHead);
if iHead < 128 then
//A类网
begin
Result := sHead + '.255.255.255';
end
else
begin
if iHead < 192 then
//B类网
begin
s := Copy(sIPAddr, 1, ai[2] - 1);
Result := s + '.255.255';
end
else
//C类网
begin
s := Copy(sIPAddr, 1, ai[3] - 1);
Result := s + '.255';
end;
end;
end;

 
fastnet上的那个udp控件有bug,udp包不能大于2k,
可以用indy的那个包,而且根据tcp/ip协议,广播地址是可以算出来的。
例如你的ip是192.168.2.188,mask是255.255.255.0,广播地址就是192.168.2.255
 
评分开始了:chen_ye,chenlili,cj each 20,wind2000 40
那么如果TUDP不能实现广播,用什么第三方控件或者调什么API;
QQ是什么原理,是不是有一个服务器,为了实现QQ,我想了个土办法,
用一个公用的电子邮箱作服务器,每一个邮件的主题放一个登陆者
的信息,如:
张三/121.24.222.32,李四/32.65.231.3...是不是很土;
不过试了试还可以,我还想过用FPT来作服务器,
是不是比电子邮箱快些,就是个人主页不太稳定所以还是用电子邮箱
不知有没有什么更好的办法
 
>> to wind2000
原码可以提供下载吗
 
to thomashukaidi:
sorry,不行!
 
try multicast
 
顶部