关于类似OICQ的编程问题(100分)

  • 主题发起人 主题发起人 finalwish
  • 开始时间 开始时间
提问者:
如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.asp
 
我也试过,好像不同的局域网通讯会出现问题

listen...
 
>>如果局域网外和局域网内代理服务器自己处理,但在socket编程中传递的地址只有IP和
>>端口,这样局域网外的路由怎样知道这个包是局域网外的,还是局域网内的。因为IP有可能重复。

你不需要知道它是否在局域网内,只需指定IP,Port就行了。
这个IP是局域网服务器的IP,Port则是服务器为这个申请所分配的特定Port.
UDP在双方都在局域网内的情况下也可以直接通信.TCP则会无法建立连接。

不过得有某一端知道另一端的IP+Port,因为代理的时候Port是代理服务器按某一规则分配的,
你事先并不知道会是什么Port.得借助于自己的服务器端。
 
根本就还要写一段处理代理与局域网通讯的中间层。
楼上说的只是道理上的说法。
实际他编起来还不是一样。
这段代码当然是写完在SERVER执行。
由SERVER反回来各个代理。具体我还在研究。
 
我也是有这样的问题!看来大家的水平都是那么差劲了!

我试过局域网内的机子可以用UDP能过代理向互连网其他机器发送消息!
但互连网其他机器怎么样再能连上局域内的机子呢? 真是难题呀!
我再在关注!
 
我也无法解决,正关注此类问题!
 
问题为什么还没结束呢?
UDP协议也属于TCP/IP协议
应为此协议是可路由的,应此无需考虑他经过那些地方。
只需知道目标的地址和端口就足够了。
要知道,地址是确定目标机器的;端口是用来区别应用(或服务)的。
**** 协议发送的数据包中包含了目标和自己的地址和端口 ****
因此,两个局域网之间的机器通讯,最大的问题就是如何得知对方的地址了。

当然,如果有一方的地址或服务器(包括代理,路由)是固定的会简单一些。
否则,需要有一台固定地址(起码是双方知道)的机器牵线,
告诉双方(起码也是要发信息的一方)对方的地址。
当一方知道对方的地址和端口后,就可以发送信息了。
当对方收到信息后可以从信息包中得知对方的地址和端口,就可以回复了。
就这么简单。其他的事不需要你的程序操心。

**********************************
如果你使用NAT方式上网(如WinRouter),
在Internet上的机器看来,你的地址和你的服务器地址是一样的。
但你的端口是你的服务器分配的。
他会把送到你端口的数据转送到你在局域网中的地址。
**********************************
 
我正在测试,有谁愿意参与测试吗?
OICQ:19868240
 
局域网内的机器要出去,要通过代理,udp协议就要开了socks5的代理才行。
网内的机器和网外的机器通讯,分2步;先和代理通讯,也就是说实际上它只是和代理通讯
代理再和网外的机器通讯。对于internet上的机器来说和你通讯的就是代理的ip和port。
代理再把数据转给网内的机器。
对于编写udp程序来说:可以不用考虑代理问题。由代理服务器自己解决。
而且我们还可以使用sockscap32这样的软件。
至于两台机器都在不同的局域网内要实现udp通讯,我觉得从理论上说不通。
就好比说:你有一台在internet网上的机器要和通过代理上网的局域网内的机器通讯,由你主动
发出联结请求,这如何 能实现?你发出的ip包如何找到它的ip地址。
路由器根本就路由这种内部ip地址。
哪么你只能和它的代理服务器联系,由代理服务器把数据转给内网。这样我想应该在服务器
端写一个程序,把外网主动的联结请求和内网连起来。
或者在internet上有一大家都信任的第三方,由它来传送两局域网内的机器通讯。
httptoscok等软件应该就是这种原理。
不过我好象听说过有些代理服器能允许internet网上的机器访问内网,不过要把某些选项
打开。不过这样连外网的机器都能访问内网,那就没有一点安全可言了。
以上为个人浅见,欢迎讨论!
 
这是个老问题,我想你们不用再在UDP协议本身上讨论,我想OICQ实现不同局域网里的通讯,
不会是用UDP本身实现的,因为从原理上来说,UDP协议本身不具备这个能力,我想是通过
OICQ的服务器中转过的,具体原理是每几十秒钟去服务器读一次信息,就像OICQ的留言一样,
如果有就显示信息,采用的主动的方式来读取信息。
 
后退
顶部