以为为了维持这个对话,要每隔壁一段时间,向服务器发一个数据包(心跳包)。
我的问题是:如果A既要和服务器S通信,又要和另一台电脑B通讯,那么是不是既要向服务器发送心跳包,同时也要向B发送心跳包?
就是说:内网的主机A,如果要向不同的电脑通信,为了维持对话,是不是它向几个因特网上的电脑通信,就要向这几个电脑都发送心跳包?不是说:只向一个电脑(比如向服务器发)发心跳包就够了?
12 个解决方案
#1
我不知道我说清楚我的意思没有。
就是说:一个主机,处在内网中,如果它要和服务器S以及其他几个客户諯通讯,是不是说:得向服务器和这几个客户端都发送心跳包?只向服务器发送心跳包是不够的?
就是说:一个主机,处在内网中,如果它要和服务器S以及其他几个客户諯通讯,是不是说:得向服务器和这几个客户端都发送心跳包?只向服务器发送心跳包是不够的?
#2
udp发什么心跳包?
#3
难道UDP不要发心跳包?
我做的是一个类似QQ的即时通讯软件,特点是A和B通过服务器互相交换IP地址和端口,然后它们直接通讯,不经过服务器,既提高了效率,又增加了保密性。
我用的是UDP协议。
现在的问题是:通讯的两个人,很可能都是(或者一个是)处于内网中的。需要穿透。如果在服务器S的牵头下,A和B互相对发信息,即可以打通通讯。但同时,A和B又得和服务器保持联系。而且A和B有可能与多人聊天。
我的问题是:如果A既要与服务器S通讯,又要与多达几个或十几个用户聊天(通讯),那么,他如果处在内网中,当然得穿透,穿透了以后,是不是要向服务器和那十几个用户分别发送心跳包?否则过一段时间不发信息,路由器的seesion(对话)是不是会关闭?如果只向服务器发送心跳包,是不是可以保证向那十几个用户的通讯session不会关闭,因此就不需要向那十几个用户发送心跳包了?
我的意思是:如果A处在内网中,用UDP协议,既向服务器发信息,又向其他十几个用户发信息(直接点对点,不经过服务器)。 是只需要向服务器发送心跳包维持session就够了呢?还是必须向所有通讯端,包括那十几个用户都发送心跳包?
#4
你的这种方式属于NAT穿透,实现P2P通信,不是传统意义上的UDP了,穿透需要发送心跳包,来维持这个有效的连接,不然长时间不通信,路由器会不允许
#5
发心跳包的目的:
1.TCP发心跳包是为了维持连接的状态,防止对方断开了,自己不知道。
2.UDP发心跳包的目的,就是为了保持私网和外网的一个通道,防止一段时间后,外网主动发信息给私网被路由器挡掉。针对私网来说,如果不关注外网给自己发消息,就没必要心跳包
1.TCP发心跳包是为了维持连接的状态,防止对方断开了,自己不知道。
2.UDP发心跳包的目的,就是为了保持私网和外网的一个通道,防止一段时间后,外网主动发信息给私网被路由器挡掉。针对私网来说,如果不关注外网给自己发消息,就没必要心跳包
#6
udp发什么心跳包?
难道UDP不要发心跳包?
我做的是一个类似QQ的即时通讯软件,特点是A和B通过服务器互相交换IP地址和端口,然后它们直接通讯,不经过服务器,既提高了效率,又增加了保密性。
我用的是UDP协议。
现在的问题是:通讯的两个人,很可能都是(或者一个是)处于内网中的。需要穿透。如果在服务器S的牵头下,A和B互相对发信息,即可以打通通讯。但同时,A和B又得和服务器保持联系。而且A和B有可能与多人聊天。
我的问题是:如果A既要与服务器S通讯,又要与多达几个或十几个用户聊天(通讯),那么,他如果处在内网中,当然得穿透,穿透了以后,是不是要向服务器和那十几个用户分别发送心跳包?否则过一段时间不发信息,路由器的seesion(对话)是不是会关闭?如果只向服务器发送心跳包,是不是可以保证向那十几个用户的通讯session不会关闭,因此就不需要向那十几个用户发送心跳包了?
我的意思是:如果A处在内网中,用UDP协议,既向服务器发信息,又向其他十几个用户发信息(直接点对点,不经过服务器)。 是只需要向服务器发送心跳包维持session就够了呢?还是必须向所有通讯端,包括那十几个用户都发送心跳包?
你的这种方式属于NAT穿透,实现P2P通信,不是传统意义上的UDP了,穿透需要发送心跳包,来维持这个有效的连接,不然长时间不通信,路由器会不允许
是的,我就是在实现NAT穿透来实现P2P通信。
在这种情况下,如果A与服务器以及几个用户进行通信 。是只需要向服务器发送心跳包维持连接就够了?还是必须向服务器和所有用户都发送心跳包来维持各自的连接?
#7
发心跳包的目的:
1.TCP发心跳包是为了维持连接的状态,防止对方断开了,自己不知道。
2.UDP发心跳包的目的,就是为了保持私网和外网的一个通道,防止一段时间后,外网主动发信息给私网被路由器挡掉。针对私网来说,如果不关注外网给自己发消息,就没必要心跳包
我就是为了第二个目的。
请问:如果一个客户端A,和服务器S以及另两个客户端B,C通信。它是只需要向服务器S发送心跳包就够了?还是必须向S,B,C都发送心跳包?
#8
必须向S,B,C都发送心跳包。我觉得。
#9
IM消息通过服务器转发,就只要向S发心跳了。
#10
这个是由你和对方的网关决定的,通常情况下,需要服务器端和客户端都进行发送,以保持在路由的nat
此外还有isp接入局端的nat处理
由于现在ipv4公网地址越来越少
所以例如移动 铁桶之类的都采用了伪公网地址[保留地址]进行分配
然后你所谓的nat穿透实际是3+次nat转换
在这种情况下,你不仅仅需要向服务器端发送noop包来维持,还需要对每一个连接的p2p节点发送noop包来维持
但实际上,在双方都是内网通过路由上网,而且分配到的是伪公网的情况下
nat穿透的概率基本是0
只有在至少一方能够获得公网地址的情况下,你这种nat穿透才有意义,另外通常,如果其中一方采用了例如cisco等企业级路由的情况下,穿透的概率也依然会接近0,或者在穿透成功后5分钟内连接中断
此外还有isp接入局端的nat处理
由于现在ipv4公网地址越来越少
所以例如移动 铁桶之类的都采用了伪公网地址[保留地址]进行分配
然后你所谓的nat穿透实际是3+次nat转换
在这种情况下,你不仅仅需要向服务器端发送noop包来维持,还需要对每一个连接的p2p节点发送noop包来维持
但实际上,在双方都是内网通过路由上网,而且分配到的是伪公网的情况下
nat穿透的概率基本是0
只有在至少一方能够获得公网地址的情况下,你这种nat穿透才有意义,另外通常,如果其中一方采用了例如cisco等企业级路由的情况下,穿透的概率也依然会接近0,或者在穿透成功后5分钟内连接中断
#11
IM消息通过服务器转发,就只要向S发心跳了。
不是,我的通信软件是A与B直接通讯,通过服务器S,只是交换一下对方的IP地址和端口,然后通讯的时候,就是直接通讯了。不通过服务器转发的。
#12
你这个属于P2P,比较复杂,可以找一本这方面的书看一下
#1
我不知道我说清楚我的意思没有。
就是说:一个主机,处在内网中,如果它要和服务器S以及其他几个客户諯通讯,是不是说:得向服务器和这几个客户端都发送心跳包?只向服务器发送心跳包是不够的?
就是说:一个主机,处在内网中,如果它要和服务器S以及其他几个客户諯通讯,是不是说:得向服务器和这几个客户端都发送心跳包?只向服务器发送心跳包是不够的?
#2
udp发什么心跳包?
#3
udp发什么心跳包?
难道UDP不要发心跳包?
我做的是一个类似QQ的即时通讯软件,特点是A和B通过服务器互相交换IP地址和端口,然后它们直接通讯,不经过服务器,既提高了效率,又增加了保密性。
我用的是UDP协议。
现在的问题是:通讯的两个人,很可能都是(或者一个是)处于内网中的。需要穿透。如果在服务器S的牵头下,A和B互相对发信息,即可以打通通讯。但同时,A和B又得和服务器保持联系。而且A和B有可能与多人聊天。
我的问题是:如果A既要与服务器S通讯,又要与多达几个或十几个用户聊天(通讯),那么,他如果处在内网中,当然得穿透,穿透了以后,是不是要向服务器和那十几个用户分别发送心跳包?否则过一段时间不发信息,路由器的seesion(对话)是不是会关闭?如果只向服务器发送心跳包,是不是可以保证向那十几个用户的通讯session不会关闭,因此就不需要向那十几个用户发送心跳包了?
我的意思是:如果A处在内网中,用UDP协议,既向服务器发信息,又向其他十几个用户发信息(直接点对点,不经过服务器)。 是只需要向服务器发送心跳包维持session就够了呢?还是必须向所有通讯端,包括那十几个用户都发送心跳包?
#4
udp发什么心跳包?
难道UDP不要发心跳包?
我做的是一个类似QQ的即时通讯软件,特点是A和B通过服务器互相交换IP地址和端口,然后它们直接通讯,不经过服务器,既提高了效率,又增加了保密性。
我用的是UDP协议。
现在的问题是:通讯的两个人,很可能都是(或者一个是)处于内网中的。需要穿透。如果在服务器S的牵头下,A和B互相对发信息,即可以打通通讯。但同时,A和B又得和服务器保持联系。而且A和B有可能与多人聊天。
我的问题是:如果A既要与服务器S通讯,又要与多达几个或十几个用户聊天(通讯),那么,他如果处在内网中,当然得穿透,穿透了以后,是不是要向服务器和那十几个用户分别发送心跳包?否则过一段时间不发信息,路由器的seesion(对话)是不是会关闭?如果只向服务器发送心跳包,是不是可以保证向那十几个用户的通讯session不会关闭,因此就不需要向那十几个用户发送心跳包了?
我的意思是:如果A处在内网中,用UDP协议,既向服务器发信息,又向其他十几个用户发信息(直接点对点,不经过服务器)。 是只需要向服务器发送心跳包维持session就够了呢?还是必须向所有通讯端,包括那十几个用户都发送心跳包?
你的这种方式属于NAT穿透,实现P2P通信,不是传统意义上的UDP了,穿透需要发送心跳包,来维持这个有效的连接,不然长时间不通信,路由器会不允许
#5
发心跳包的目的:
1.TCP发心跳包是为了维持连接的状态,防止对方断开了,自己不知道。
2.UDP发心跳包的目的,就是为了保持私网和外网的一个通道,防止一段时间后,外网主动发信息给私网被路由器挡掉。针对私网来说,如果不关注外网给自己发消息,就没必要心跳包
1.TCP发心跳包是为了维持连接的状态,防止对方断开了,自己不知道。
2.UDP发心跳包的目的,就是为了保持私网和外网的一个通道,防止一段时间后,外网主动发信息给私网被路由器挡掉。针对私网来说,如果不关注外网给自己发消息,就没必要心跳包
#6
udp发什么心跳包?
难道UDP不要发心跳包?
我做的是一个类似QQ的即时通讯软件,特点是A和B通过服务器互相交换IP地址和端口,然后它们直接通讯,不经过服务器,既提高了效率,又增加了保密性。
我用的是UDP协议。
现在的问题是:通讯的两个人,很可能都是(或者一个是)处于内网中的。需要穿透。如果在服务器S的牵头下,A和B互相对发信息,即可以打通通讯。但同时,A和B又得和服务器保持联系。而且A和B有可能与多人聊天。
我的问题是:如果A既要与服务器S通讯,又要与多达几个或十几个用户聊天(通讯),那么,他如果处在内网中,当然得穿透,穿透了以后,是不是要向服务器和那十几个用户分别发送心跳包?否则过一段时间不发信息,路由器的seesion(对话)是不是会关闭?如果只向服务器发送心跳包,是不是可以保证向那十几个用户的通讯session不会关闭,因此就不需要向那十几个用户发送心跳包了?
我的意思是:如果A处在内网中,用UDP协议,既向服务器发信息,又向其他十几个用户发信息(直接点对点,不经过服务器)。 是只需要向服务器发送心跳包维持session就够了呢?还是必须向所有通讯端,包括那十几个用户都发送心跳包?
你的这种方式属于NAT穿透,实现P2P通信,不是传统意义上的UDP了,穿透需要发送心跳包,来维持这个有效的连接,不然长时间不通信,路由器会不允许
是的,我就是在实现NAT穿透来实现P2P通信。
在这种情况下,如果A与服务器以及几个用户进行通信 。是只需要向服务器发送心跳包维持连接就够了?还是必须向服务器和所有用户都发送心跳包来维持各自的连接?
#7
发心跳包的目的:
1.TCP发心跳包是为了维持连接的状态,防止对方断开了,自己不知道。
2.UDP发心跳包的目的,就是为了保持私网和外网的一个通道,防止一段时间后,外网主动发信息给私网被路由器挡掉。针对私网来说,如果不关注外网给自己发消息,就没必要心跳包
我就是为了第二个目的。
请问:如果一个客户端A,和服务器S以及另两个客户端B,C通信。它是只需要向服务器S发送心跳包就够了?还是必须向S,B,C都发送心跳包?
#8
必须向S,B,C都发送心跳包。我觉得。
#9
IM消息通过服务器转发,就只要向S发心跳了。
#10
这个是由你和对方的网关决定的,通常情况下,需要服务器端和客户端都进行发送,以保持在路由的nat
此外还有isp接入局端的nat处理
由于现在ipv4公网地址越来越少
所以例如移动 铁桶之类的都采用了伪公网地址[保留地址]进行分配
然后你所谓的nat穿透实际是3+次nat转换
在这种情况下,你不仅仅需要向服务器端发送noop包来维持,还需要对每一个连接的p2p节点发送noop包来维持
但实际上,在双方都是内网通过路由上网,而且分配到的是伪公网的情况下
nat穿透的概率基本是0
只有在至少一方能够获得公网地址的情况下,你这种nat穿透才有意义,另外通常,如果其中一方采用了例如cisco等企业级路由的情况下,穿透的概率也依然会接近0,或者在穿透成功后5分钟内连接中断
此外还有isp接入局端的nat处理
由于现在ipv4公网地址越来越少
所以例如移动 铁桶之类的都采用了伪公网地址[保留地址]进行分配
然后你所谓的nat穿透实际是3+次nat转换
在这种情况下,你不仅仅需要向服务器端发送noop包来维持,还需要对每一个连接的p2p节点发送noop包来维持
但实际上,在双方都是内网通过路由上网,而且分配到的是伪公网的情况下
nat穿透的概率基本是0
只有在至少一方能够获得公网地址的情况下,你这种nat穿透才有意义,另外通常,如果其中一方采用了例如cisco等企业级路由的情况下,穿透的概率也依然会接近0,或者在穿透成功后5分钟内连接中断
#11
IM消息通过服务器转发,就只要向S发心跳了。
不是,我的通信软件是A与B直接通讯,通过服务器S,只是交换一下对方的IP地址和端口,然后通讯的时候,就是直接通讯了。不通过服务器转发的。
#12
你这个属于P2P,比较复杂,可以找一本这方面的书看一下