局域网机器通过internet上实现点对点的难题(高手帮忙,分多多) (200分)

  • 主题发起人 主题发起人 phyyun
  • 开始时间 开始时间
大力水牛,这次双休日在家里,没有上网,所以没有上来,
你提的问题:那是不是如果有几个接收端(在同一网关里)都在监听同一个端口(8000)的话,则只要发送方通过8000口发送数据,几个接收端都同时收到啊?

如果你安装了网关系统以后,难道你可以发现,比如有好多人同时在使用的QQ的情况,大家默认的QQ端口都是8000,那么按照你的理论,大家发送的QQ消息,同时都可以收到了,网吧不是乱套了吗?其实不是这样的,虽然你这里本地是8000端口,但是在和网关服务器通讯的时候,他已经和你建立了TCP/IP传输通道,所以你在QQ服务器看来,只是来自同一IP地址而不同端口的QQ消息请求,所以这里不会存在几个接收端都同时收到的现象发生。
 
大力水牛,点对点通信不知道对方的IP是无法进行通讯的,但是我们现在一直再说的是通过服务器中转,所以不一定要相互可以通讯的情况,因为他们如果都可以连接到服务器,服务器会帮助他们完成消息传输的。

QQ是36525991的朋友说他可以解决这样的问题。请和他联系,我已经和他联系过了,他使用的是UDP,可以穿透网关和防火墙进行通讯。大家有什么问题可以联系他,但是他好像细节问题不肯说。


最主要的是我们大家还要靠自己。
 
1、连接超时怎么判断?再次发送消息时返回错误异常怎么判断,要用TRY EXCEPT END吗?
答:是的,在属性里面设置连接超时的时间,在规定时间里面如果无法通讯,就会返回一个通信异常,10061,可以用TRY EXCEPT END来提示用户和服务器连接超时,然后进入相应的例程。

、系统服务器S分别记录下用户A和用户B的编号和IP地址。如你所说,其实记下IP是没有用的,应该记下ServerSocket.Socket.connections.sendtext(Msg)的I的值,对吧?请问用哪个方法取得i值。
答:这个数值是ServerSocket在建立连接通道时随时改变的,每建立一个连接通道就自动会加1。你可以将这个东西建立一个列表,存在数据库里面,比如对方的IP地址,端口号,用户名称,建立连接的时间等等信息。
 
应该不难啊,socketconnect不都是有代理的嘛,
 
3、多线程时的续传,这个我还是想实现一下,占用资源先不管,实现就行,反正我这只是自己用的。固定的多线程可以实现,就是你的这个思路,我也想过。难点在怎么动态修改线程,比如增减线程,然后再续传。
答:这个不是不可以做,如果做的话,太烦了,比如这个1M大小的文件,第一次使用5个线程,分别在这个文件的5个点开始现在,每个点差距200K,然后断线,这样的话,服务器可以知道每个线程在这个文件的每个开始的位置,和每个线程已经传输文件的多少,然后再次传输,对方开了10个线程,那么你要避开上次已经传输的文件块,然后再次计算每个线程的起始点。

4、我原先是想建个服务器端,收集好用户A,B的相关信息,比如IP和连出端口,然后让A和B互联。服务器不需要做转发的工作,这样是不是不行?我试过,不行,只是想确认一下,因为可能是我这边网关的问题。
答,我问了上面的朋友,他说用UDP是可以的,我也没有试过,所以我也不知道。我想因该是可以的,因为现在的MSN和QQ也开始使用UDP了。

5、关于自定义消息格式,有没有一个例子或源码,用SOCKETCONNECTION和CLIENTCONNECTION做的?
答,我这里没有自定义的消息格式,你可以参考一下QQ的,这个资料网上有的,其实自定义消息格式,是一个大家共同遵循的一个消息标准而已。
 
谢谢天使屁屁猪的帮忙。
 
后退
顶部