我是想实现QQ的原理
客户端有两个WINSOCK
一个是TCP的,与服务器连接,随时得到在线人数
一个是UDP的,用来发送信息给在线用户
TCP方式的是正常,但是用UDP的,
发送信息的时候就出现那个"连接远端被重置"的错误
是不是因为UDP方式的时候没有得到代理服务器内的IP大家介绍一下QQ在局域网中是如何用UDP方式的,
客户端有两个WINSOCK
一个是TCP的,与服务器连接,随时得到在线人数
一个是UDP的,用来发送信息给在线用户
TCP方式的是正常,但是用UDP的,
发送信息的时候就出现那个"连接远端被重置"的错误
是不是因为UDP方式的时候没有得到代理服务器内的IP大家介绍一下QQ在局域网中是如何用UDP方式的,
解决方案 »
- 类似于photoshop的液化算法
- 在程序中识别U盘里面一个文件
- 是不是 基于 单文档 能 实现的功能,基于对话框也是 能 实现的,正在做一个 gprs监控系统,需要有 一张地图,然后有个导航器*(就是类似于鹰眼的那种,但看的是位图)?
- 编译器报这种错是什么意思?
- 请教一个新手的问题!~
- 函数定义:void func(UCHAR /*nTTL*/) // typedef unsigned char UCHAR;
- 那位高手请指点迷津 VC
- 输入一个数学公式,如何判别并输出其图形(C++)(100分讨论)
- 关于CRichEditView字体的设置
- VC6.0中的基础问题
- pb 问题求助
- 请问如果我创建了一个控件,如果拦截这个控件的消息?不要告诉我用Classwizard!!!!
客户端上网的方式:拨号:有internet ip,正常
Nat 透明代理:没有Internet IP
Socks5:必须设置代理的ip,port,auth信息
Http代理:......你可能遇到的问题在于没有取得对方的internet ip.
它是客户端到服务器用TCP方式
客户端到客户端是UDP方式
当两客户端相互发信息时,在线就用UDP方式发送过去,不在线,就用TCP方式发送到服务器存在数据库中,当对方下次来的时候就在登录的时候检测是不否有旧信息,有,就发送过去现在我遇到的问题主要就是UDP如何获得局域网的IP
通过代理上网的用户的IPto sufeng(sufeng) :
正是,那么该如何解决
其实你用些工具就会发现,直接上网QQ的port都是4000,而局域网内代理QQ的都不是4000(这个port应该已经给代理占用来接收内部QQ的请求了).
所以,也许你都不需要知道sock5这样的东东是怎么动作也能完成你所想,也许你还是要去知道一些在你作的不顺的时候.
以上都是自己的一家之言,请大家指正.
QQ的端口号一般为4000,
但是经过我们的路由器后由于经过了NAT
转换,就变成了10000
以上的,假设是第一个人被分配的是4000
那么经过路由器后会改成10000,
第二个人被分配的是4000,
那么经过路由器后会改成10001,
基本上有下面的对应关系:
4000-10000
4001-10001
这是在同一台机器时的情况,
如果是两台机器,那么很有可能都是4000,
但是两人的IP地址不一样,所以不会出现冲突:
(192.9.200.101,4000)----(12.1.1.1,10000)
(192.9.200.102,4000)----(12.1.1.1,10001)
(192.9.200.103,4000)----(12.1.1.1,10002)
(192.9.200.103,4001)----(12.1.1.1,10003)
……
192.9.200.101,192.9.200.102,192.9.200.103是局域网内的三台机器,
它们的网关缺省值是192.9.200.91;而192.9.200.91是路由器以太口的地址,
12.1.1.1是广义口的地址,所以对QQ的服务器来说,它根本不知道有几个人,
而是认为所有的信息都来自12.1.1.1,
添加其它用户时候肯定要将自己的IP
地址跟PORT
通知给服务器,不过也可能是服务器把你的IP跟PORT
告诉给另外一个人的
不知道我说的你明白没有
我觉得QQ用TCP
连接不太好,这样一来会占用大量的网络资源(每天上网的人不要太多哦),那其他一些TCP
的服务还做不做事情啊?
我现在正在做局域网内的QQ可以交流交流![email protected]
比如“我的好友”和“陌生人”之间的切换,是调用了两个不同CView还是一个属性页在翻页???
恳请指教!