请教:两台使用局域网上网的机器如何才能建立连接?(200分)

  • 主题发起人 主题发起人 Traveller
  • 开始时间 开始时间
错.TCP无法返回数据
UDP可以
for i:=0 to MAXNMUDP-1 do
begin
listbox3.items.add(inttostr(MyPort));
NMUDP.LocalPort:=MyPort;
Send(i,0,'207.46.230.218',9000,pchar('hello'),5); //www.microsoft.com
Send(i,0,'202.106.185.77',9000,pchar('hello'),5); //163.com
Send(i,0,'66.218.71.113',9000,pchar('hello'),5); //yahoo.com
end;
 
经过一段时间的测试,我得到了如下的结果(当然有可能部准确,因为可以试验的环境有限)

要想实现两个人在两个局域网中通话,一般来说目前只有UDP可以实现,这个原理不好说,
估计可能和UDP的协议有关,因为,我以前看过一本关于delphi网络编程方面的书,上面说
到DUP和TCP他们最终实现的上层是不一样的,TCP对应于HTTP、FTP等等,DUP对应于DNS,
所以我想只有DUP可以通过类似代理或是网关什么的,进行通信,这个试验我已经验证了。

以前我自己做的一个聊天软件是TCP的,我家是宽带,我可以连接别人,别人连接不了我,
但是使用DUP后,我可以连接别人,别人可以连接我。
 
:DreamTiger, 时间:2002-11-6 9:47:00, ID:1415867
有一个问题啊:如果内网用户A开了一个UDP服务器,端口假设为4444,那么,
他的主机B为什么会专门映射一个端口给他?难道A向B提出申请了?如果这样,
那外网用户不是很容易就可以接触内网机器了?UDP是这样,那么TCP连接也
有这个问题,打个比方,

可能是你理解错误
A访问INTENET的时候是通过电脑B的
而在A打开端口是不确定的
而且保持打开的状态时间很短的
关键怎么得到这个端口而且保持不关闭
TCP也会打开
但是只有UDP协议从而在路由上面可以从A返回数据到B
TCP是无法返回的
 
先结贴,如果有demo程序可以共享将另给分数
 
多人接受答案了。
 
看了此贴,收益非浅,向liyipeng 请教一个问题:
如果两个人用宽带直接上网,delphi的那个netchat例子(tcpServer和TcpClient)可以直接通话吗?需要设置什么东西吗,谢谢
 
如果是delphi自带的那个例子好像不行,我就是用udp协议试验成功过,但是不稳定,tcp/ip的没戏,呵呵
 
后退
顶部