一个CS系统中,服务器端有时需要与客户端通信,有时客户端之间有时也需要通信,已知它们都是在互联网上的,服务器端的IP地址是动态的(根据需要也可能改为静态),而客户端中,一些如果我们家中使用的机器是通过宽带网连接到互联网的,也有些如同我们工作中用到机器是一个局域网中通过路由器连接到互联网的。请问用什么技术手段能保证信息的通顺传递?我感觉UDP、TCP、JMS等都有些问题,不知QQ和MSN等是怎么做的,请大家指点,谢谢。
调试欢乐多
至于如何保证,用java的socket类以及程序的逻辑(需要考虑多种情况,其实也就是信息的同步传输以及网络断了,服务器/客户端程序退出了,该如何处理)。
A 和 B都是客户,C是服务器
如果A和B要通信,必定要A->C->B这样
A和B连接到公网的C没问题,而C反过来连接到A,C是否可行?
服务器客户机是可以确定,但是现在比较困惑的是AB两个客户端如果要通讯直接进行当然是不行的,只能通过服务器C中转,A找到服务器C并传输信息当然没问题,C好像只能等B来拿,而主动将A的消息转发给B好像不可行。不知QQ等是怎么做的?
设内网中的机器a,b。公网中的机器C,c的IP是固定的。A要和B联系:
1.a,b先和C建立TCP连接,采用C/S结构,C端作服务器端,a,b为客户端;
2.A向C发送一个UDP包,C在接收这个包的时候,可以同时获得A的代理的IP-a和这个包采用的Port-a;
3.C将获得的IP和PORT通过TCP连接发送给b;
4.B接收到从C发送过来的IP-a和PORT-a,B发送一个UDP包(目标地址和端口号采用刚才收到的IP和PORT)。
5.这样A就可以收到一个来自B的UDP包,同时也会获得与B的代理的IP-b和PORT-b。根据这个,a,b之间就可以通过UDP来实现通信。
注意;在a,b间互相后的IP和Port后,在一定时间(如2分钟)内应该通信一次,以免IP和PORT丢失。