!!!!讨论OICQ的实现方法

playpcgame 2000-09-10 08:16:00
请大家讨论OICQ的实现方法,如体系结构,负载均衡,消息的传递,各版本之间的协同等等。分数多多,不够可以再加!!
...全文
1542 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuzhouqun 2000-09-23
  • 打赏
  • 举报
回复
关注!
raincy 2000-09-19
  • 打赏
  • 举报
回复
基于tcp的设计应该是编起来比较方便,除了第一次连接建立的时候比较慢,
以后的消息发送的速度是有保障的,所以在点对点的聊天的时候,采用tcp连
接应该是一种不错的选择.
至于服务器采用udp连接,我觉得可能适因为服务器端为保留太多的tcp信息
而使系统的运行效率下降.采用udp在这个时候有明显的优势.
dcrwy 2000-09-19
  • 打赏
  • 举报
回复
我的观点:
1.实际上用TCP可能更安全些,但是UDP更适合聊天软件。
2.OICQ与客户端的不断联系可能是通过一台专用服务器。
3.一个端口足够了,可以使用进程、线程。
4.OICQ还有很多缺点
5.无商不奸,如果有自杀功能了,那。。。
Putao 2000-09-19
  • 打赏
  • 举报
回复
OICQ得成功不仅是因为软件写得好,还有强大的网站支持
netsong 2000-09-18
  • 打赏
  • 举报
回复
怎么没人讨论了?
potatopro 2000-09-15
  • 打赏
  • 举报
回复
kingwill 2000-09-15
  • 打赏
  • 举报
回复
attention
playingmygame 2000-09-15
  • 打赏
  • 举报
回复
take care^_^
flywhc 2000-09-14
  • 打赏
  • 举报
回复
刚好前一段做完了一套类ICQ系统
其实OICQ从内核上看还不完善 -- 至少我觉得不如ICQ好。

OICQ用的UDP和TCP混合编程。我开始以为TCP比较好,比较稳定,
只是稍占资源,服务器端编程困难一些;后来在PROXY后面做测试才发现
UDP协议的好处 -- 多数PROXY软件都支持UDP MAPPING,这样根本无需什么SOCK4、5
就能连出去了。要想支持TCP,必须用SOCK5,一种很“麻烦”的协议,每次建立一个
连接都要建立另一个与SOCK5端口的确认、请求、分配等手续。
于是在单位里用OICQ最麻烦的就是在PROXY后面不能传文件(因为用的TCP协议)

于是我把所有TCP协议都干掉了,全部用一个UDP SOCKET收、发,特省资源。CLIENT的PORT
没必要规定,随机分配就好。这样只要网管开了8000端口,程序根本不用区分是在PROXY外面还是里面。但UDP协议太不稳定了,丢、重、错包都常常发生,必须自己定义数据包格式,必须加校验,必须加时间戳判断。数据重发应该更智能一些,不该是3秒一次。尤其对于文件传输,国内的ICQ系统都做的不怎么样,太慢了,没有自动调速自动续传的机制,应该好好看看ZMODEM之类的算法。

关于服务器端的线程,目前我还是用单线程,因为非阻塞方式的网络操作很快,数据库也很快,甚至可以忽略。如果用户量很巨大,可以用分布式的,把一台服务器做专门的数据库服务器。至于如何把负载分到各个服务器上,我不懂网络通讯,但我的办法是在client有个服务器列表 -- 甚至可以自动更新,登录时向各服务器发请求,哪个先回认为哪个最快;当连不上时自动切到另一个再试;并自动调整顺序。以前的ICQ好象就是这么干的,现在的不知道。

确定某用户是否在线、离线,除登录时由服务器刷新告之外,比较好的算法是由好友“主动”的告诉client -- 细心的可以发现,如果强制断线的话,ICQ上的用户1分钟仍然在线,如果选“OFFLINE”则立刻掉下去。
solver 2000-09-14
  • 打赏
  • 举报
回复
关注
homesoft 2000-09-13
  • 打赏
  • 举报
回复
关注
shines77 2000-09-13
  • 打赏
  • 举报
回复
更正: 是1XXXX, not 1XXXXX
shines77 2000-09-13
  • 打赏
  • 举报
回复
如果你用UDP探测器侦测会发现,OICQ客户端每一分钟与服务器握手一次,发送UDP Msg时每 3秒发送一次,不断重复,直到对方接受后把已接受的信息发送回来,发送框方才消失。

如果客户端是169需要服务器中转发送信息。
如果是从169传文件到163用户,就根本不可能,因为他们是直接的TCP/IP连接,连接不上。

至于端口嘛,客户端默认是4000,如果占用则随机更换一个,所以如果你发现端口号是1XXXXX以上的,极有可能是来自169网的,因为169的所有用户是共一个IP,而端口不同罢了,有点类似一个网吧的局域网,只不过此网吧的规模大了许多。如果是1XXX,则有可能是用代理上的。

以上仅供参考。
sungang 2000-09-13
  • 打赏
  • 举报
回复
关注
coolcode 2000-09-12
  • 打赏
  • 举报
回复
我想谈谈OICQ的另一面,嘿嘿.
其一.OICQ各种功能都考虑得很周到.却惟独没有此类软件普通存在的自杀(UnRegister)功能.
目的何在?很明显是为了用户数目只增不减.要知道,用户群是此类网站的存在的基础啊.
其二,您有几个OICQ号?3个?4个?还有您早就忘掉的号哩?OICQ号称注册用户1000万.该打多大的折扣?
.......



fourway 2000-09-12
  • 打赏
  • 举报
回复
关注

biner 2000-09-12
  • 打赏
  • 举报
回复
关注
茂奇软件 2000-09-12
  • 打赏
  • 举报
回复
listen.
Sodar 2000-09-12
  • 打赏
  • 举报
回复
to zhonglei:

socks4提供connect和bind功能,具体说来connect就是内部主机可以通过socks4代理连接到远程主机,bind命令是向代理服务器申请绑定一个端口,然后把代理绑定的端口通过某种手段通知远程主机,远程主机可以向代理发起一条连接,在代理的作用下,相当于直接连到内部主机。这在使用port命令的ftp软件中经常会遇到。
socks5比socks4改进之处是增加了udp association功能,内部网络用户可以通过该功能与外界主机进行udp数据包的收发。oicq中最常用的就是这一功能。

pxq 2000-09-11
  • 打赏
  • 举报
回复
关注
加载更多回复(17)
论坛是一个通过国际互联信息网络进行发布信息和实现多人通讯的一个系统。在这个信息极其发达的时代,我们目前可以用来发布信息和进行相互交流的方法也有非常多,比如文件、通知、电报、电话、电子邮件、OICQ等等通讯手段,但是这些或者不方便或者有局限性或者有费用的问题,比如一个红头文件从下发到被人阅览这期间要通过好多手续和时间,那么一个需要几个人一起讨论的会议就非的有一定的时间,和一定的地点,聚集在一起才能举行,一般情况下都需要花费大量的人力物力。非但费时费力费钱而且效果也不一定很好。电子邮件则不是一种及时联系的手段,需要一定时间才能到达,只能作为一种辅助交流的手段。而论坛就能很好的解决这个问题,厂团委发一个通知或文件不需要专人送的各个岗位和车间,我们也不需要聚集在同一地点,各自在不同的地点就可以在论坛中发言,大家互相讨论。而且好的论坛在讨论时还有各种表情符号等可以加强我们的表达。另外还有费用低廉,信息交流速度快等优点,青年论坛的建立将会为台电成为国际一流火力发电厂作出自己的贡献。 本论坛设计方案主要是利用局域网原理,在企业网络服务器上搭建一个网站,建立网页论坛平台,浏览者可通过网络,在自己的终端
◆ 01.htm 1、怎么用mscomm控件检测modem是否与计算机联接正确?2、如何用mscomm挂断modem与别的电话机间的连接?(已接通) ◆ 02.htm CWinInetConnection---一个封装了WinInet API函数的类 ◆ 03.htm MODEM通讯意外处理 ◆ 04.htm MsComm 文字传输 ◆ 05.htm PING一个IP地址(向它发送一个数据包并等待回应) ◆ 06.htm SMTP协议简介 (Simple Mail Transfer Protocol) ◆ 07.htm VB5.0 中远程数据库的访问 ◆ 08.htm VB下如何编写CRC校验程序 ◆ 09.htm VB中Winsock控制的UDP协议的使用 ◆ 10.htm Visual Basic 6中发送邮件的新方法 ◆ 11.htm Visual Basic通信程序设计 ◆ 12.htm Whois 示例程序 ◆ 13.htm Winsock Terminal示例程序 ◆ 14.htm WinSock断开导致客户端问题 ◆ 15.htm 把Outlook信箱中的附件另存为 ◆ 16.htm 保证连网计算机时间同步 ◆ 17.htm 编写网络寻呼机 ◆ 18.htm 编制自已的电话录音小程序 ◆ 19.htm 程序中如何启动默认的拨号连接 ◆ 20.htm 程序中如何启动默认的拨号连接? ◆ 21.htm 打开器并进入指定网址 ◆ 22.htm 打开一个直接到自己主页的器 ◆ 23.htm 得到用户的IP地址 ◆ 24.htm 电话拨号 ◆ 25.htm 电子邮件的标准格式 (RFC 822) ◆ 26.htm 断开拨号网络的连接 ◆ 27.htm 断开与 Internet 的连接 ◆ 28.htm 发送电子邮件附件 ◆ 29.htm 发送电子邮件附件1 ◆ 30.htm 发送电子邮件附件2 ◆ 31.htm 发送电子邮件附件3 ◆ 32.htm 发送电子邮件附件4 ◆ 33.htm 获得用户网络登录名 ◆ 34.htm 基 于Win95 的VB5 串 口 通 信 程 序 ◆ 35.htm 基于Win95的VB5串口通信程序 ◆ 36.htm 几个设置IE的API ◆ 37.htm 检测运程数据传送的断线 ◆ 38.htm 简单的聊天程序 ◆ 39.htm 简单电子邮件发送程序 ◆ 40.htm 建立拨号联接 ◆ 41.htm 将所有窗口最小化 ◆ 42.htm 利用IE控件访问Internet ◆ 43.htm 利用IE控件设计简易器 ◆ 44.htm 利用Mscomm32控件判断MODEM是否打开,或者正在工作,并且判断拨号时是否遇忙音 ◆ 45.htm 利用TAPI进行电话拨号 ◆ 46.htm 利用VB访问Internet ◆ 47.htm 利用VB设计聊天室 ◆ 48.htm 利用Visual Basic实现无线通讯 ◆ 49.htm 利用Winsock控件实现局域网通信 ◆ 50.htm 强制一个本地或远程NT系统关闭 ◆ 51.htm 取得网卡序列号 ◆ 52.htm 如何从 Internet 上取回某一个网页的內容? ◆ 53.htm 如何检测是否已连接到Internet? ◆ 54.htm 如何利用Winsock控件编写自己的Internet程序 ◆ 55.htm 如何每天抓取 Internet 上某一个网页中的图片来更换桌面的壁纸? ◆ 56.htm 如何启动拨号网路中的连线? ◆ 57.htm 如何使用MSCOMM32.OCX发送大于80H的字符,可否给个示例程序 ◆ 58.htm 如何通过VB获取网卡地址 ◆ 59.htm 如何用VB打开默认器或默认发信程序? ◆ 60.htm 如何用Visual Basic编写小型的网络系统 ◆ 61.htm 如何在程序中启动 NT 的【拨号连接】对话框 ◆ 62.htm 如何在程序中启动 NT 的【拨号连接】对话框? ◆ 63.htm 如何在网页上使用 VB5 制作的 ActiveX 控件? ◆ 64.htm 如何中断【拨号网络连接】 ◆ 65.htm 设计Browser及FTP程序 ◆ 66.htm 设计Chat程序 ◆ 67.htm 设计E-mail程序 ◆ 68.htm 设置计算机名称 ◆ 69.htm 使用VB获得一页的HTML代码 ◆ 70.htm 使用VB收发电子邮件 ◆ 71.htm 使用标签控件调出器 ◆ 72.htm 使用超链接和发送Email ◆ 73.htm 使用器的文件复制对话框 ◆ 74.htm 输入/输出篇 ◆ 75.htm 通过WnetEnumResource函数获得网络资源 ◆ 76.htm 通往 Internet 的捷径 ◆ 77.htm 显示计算机的名称 ◆ 78.htm 用 MAPI 控件实现发送邮件 ◆ 79.htm 用 WinSock 控件下载文件 ◆ 80.htm 用 Winsock 实现聊天的程序 ◆ 81.htm 用Internet Transfer编写FTP程序 ◆ 82.htm 用Sockets发送电子邮件 ◆ 83.htm 用VB 创 建 自 己 的 通 信 程 序 ◆ 84.htm 用VB5.0开发通信软件的技巧 ◆ 85.htm 用VB5开发IE ◆ 86.htm 用VB编写网络寻呼 ◆ 87.htm 用VB编写小型的网络系统 ◆ 88.htm 用VB创建自己的通信程序 ◆ 89.htm 用VB构建Internet的应用[微软提供] ◆ 90.htm 用VB开发标准CGI程序 ◆ 91.htm 用VB实现客户——服务器(TCP IP)编程实例 ◆ 92.htm 用VB实现客户服务器(TCP、IP)编程实例 ◆ 93.htm 用VB实现聊天讨论室和点对点会话 ◆ 94.htm 用VB写一个定时PING某IP的程序 ◆ 95.htm 用VB制作器 ◆ 96.htm 用Visual Basic 5.0设计E-mail程序(MAPI) ◆ 97.htm 用Visual Basic6.0编写客户服务器程序 ◆ 98.htm 用Visual Basic创建FTP组件 ◆ 99.htm 用Visual Basic开发数据库器 ◆ 100.htm 用Visual Basic轻松地设计Browser及Ftp程序 ◆ 101.htm 用Winsock控件发信Email ◆ 102.htm 用Winsock控件实现文件的下载 ◆ 103.htm 用Winsock实现点对点通信 ◆ 104.htm 邮件检查程序(二) ◆ 105.htm 邮件检查程序(一) ◆ 106.htm 在VB程序中怎样挂断拨号网络 ◆ 107.htm 在VB中操纵OLE服务器应用程序 ◆ 108.htm 在VB中利用UDP协议编写聊天程序 ◆ 109.htm 在VB中模拟实现邮件传输 ◆ 110.htm 在VB中如何得到网络中某一台电脑(电脑名)的网卡地质? (自己的) ◆ 111.htm 在VB中实现文件上传 ◆ 112.htm 在VB中实现文件上载 ◆ 113.htm 在VB中使用UDP协议 ◆ 114.htm 在VB中用Outlook发电子邮件 ◆ 115.htm 在WindowsNT网络中广播消息 ◆ 116.htm 在程序中打开 Internet 拨号连接窗口 ◆ 117.htm 在一个单位内部或通过广域协议(如X.25)互联的行业内部都有几十或上万台计算机互联,用Intranet虽然可以建立聊天室,但实现点对点实时对话却比较困难。本人用Winsock和VB自制了一套聊天室和对话系统,特拿来供同行们参考。 ◆ 118.htm 在应用中集成器 ◆ 119.htm 在桌面上建立一个 Internet 快捷键 ◆ 120.htm 怎样接收电子邮件(POP3协议简介) ◆ 121.htm 怎样用VB得知系统当前是否处于internet链结状态 ◆ 122.htm 制作自己的网络搜索软件 ◆ 123.htm 自动更新工作站的应用程序 ◆ 124.htm 自己的IE——用VB制作器 ◆ 125.htm HTTP协议(学习笔记) ◆ 126.htm HTTP协议四--关于Chunked编码 ◆ 127.htm IE器完全控制 ◆ 128.htm OICQ服务器系统通讯协议 ◆ 129.htm POP3协议的基本命令 ◆ 130.htm RAS API上的其他Function ◆ 131.htm VB + API 获取 IE 的 “代理服务器” 配制 ◆ 132.htm vb调用winInet API接口post数据到指定的url ◆ 133.htm vb开发通信软件 ◆ 134.htm vb设计数据库电子邮件程序(1) ◆ 135.htm vb设计数据库电子邮件程序(2) ◆ 136.htm vb设计数据库电子邮件程序(3) ◆ 137.htm vb设计数据库电子邮件程序(4) ◆ 138.htm vb设计数据库电子邮件程序(5) ◆ 139.htm vb设计数据库电子邮件程序(6) ◆ 140.htm VB实现应用程序在局域网上自动更新 ◆ 141.htm VB邮件检查程序 ◆ 142.htm vb中从域名得到IP及从IP得到域名 ◆ 143.htm VB中检测是否连网 ◆ 144.htm WebClass实现动态WEB编程之理论篇 ◆ 145.htm Winsocket网络编程谈 ◆ 146.htm Winsock编程框架 ◆ 147.htm Winsock错误代码一览表 ◆ 148.htm 程式自动呼叫拨号网络(RAS API) ◆ 149.htm 打开一个超连接 ◆ 150.htm 得到登入windows 的人的id ◆ 151.htm 访问Internet并调用Explorer ◆ 152.htm 非同步文件下载类 ◆ 153.htm 给Outlook的所有用户发送信件 ◆ 154.htm 获得网卡的MAC地址 ◆ 155.htm 基于WinSock的小型网络管理系统及其实现 ◆ 156.htm 检测是否连接到Internet ◆ 157.htm 检测网络是否连通 ◆ 158.htm 建立Web的超链接树形图 ◆ 159.htm 建立你自己的器-Properties ◆ 160.htm 建立你自己的器-查看源文件 ◆ 161.htm 建立你自己的器-打印 ◆ 162.htm 建立你自己的器-打印设置 ◆ 163.htm 建立你自己的器-发送到FontPage ◆ 164.htm 建立你自己的器-发送到Visual Interdev ◆ 165.htm 建立你自己的器-发送到软盘 ◆ 166.htm 建立你自己的器-复制 ◆ 167.htm 建立你自己的器-另存为 ◆ 168.htm 建立你自己的器-全选 ◆ 169.htm 建立你自己的器-页面设置 ◆ 170.htm 开发通信软件的技术与技巧 ◆ 171.htm 开发网络应用的5个技巧 ◆ 172.htm 利用RAS调用在VB6.0中实现拨号上网 ◆ 173.htm 利用VB提取HTML文件中的EMAIL地址 ◆ 174.htm 枚举出局域网上所有网络资源 ◆ 175.htm 面向Internet的开发工具 ◆ 176.htm 你也可以YAI--VB5中Winsock控件的使用 ◆ 177.htm 判断一个文件是否在IE的缓存中 ◆ 178.htm 启动拨号网络中的连接 ◆ 179.htm 浅谈HTTP协议(二)--返回值 ◆ 180.htm 浅谈HTTP协议(一)--结构 ◆ 181.htm 如何利用 WebBrowser 控件显示 .GIF 动画? ◆ 182.htm 如何映射(中断网络磁盘) ◆ 183.htm 设计E-mail的接收部分 ◆ 184.htm 设置器默认网址 ◆ 185.htm 实现端口对端口的聊天 ◆ 186.htm 使用ASP建立Http组件 ◆ 187.htm 使用VB编写纯ASP程序 ◆ 188.htm 使用vb获取网上邻居里的计算机名 ◆ 189.htm 使用VB建立Web Server ◆ 190.htm 使用Visual Basic开发通讯软件 ◆ 191.htm 使用资源工具包执行本地和远程重新启动 ◆ 192.htm 谈谈远程控制中关于搜索、控制计算机的功能 ◆ 193.htm 压缩 Html ◆ 194.htm 用ASP、VB和XML建立互联网应用程序(1) ◆ 195.htm 用ASP、VB和XML建立互联网应用程序(2) ◆ 196.htm 用ASP、VB和XML建立互联网应用程序(3) ◆ 197.htm 用ASP、VB和XML建立互联网应用程序(4) ◆ 198.htm 用COMMUNICATION控件进行数据采集(学习笔记) ◆ 199.htm 用OLE自动化Outlook ◆ 200.htm ActiveX控件用于DHTML开发 ◆ 201.htm 用VB编写ActiveX DLL实现ASP编程 ◆ 202.htm 用VB编写Windows CGI应用程序 ◆ 203.htm 用VB编写标准CGI程序(上) ◆ 204.htm 用VB编写标准CGI程序(下) ◆ 205.htm 用VB编写收发电子邮件程序 ◆ 206.htm 用VB编写网络监控软件 ◆ 207.htm 用VB编写异步多线程下载程序 ◆ 208.htm 用VB导入导出IE器收藏夹 ◆ 209.htm 用VB定制合路器 ◆ 210.htm 用VB和XML建立集中式应用程序 ◆ 211.htm 用VB将Html转换为文本文件 ◆ 212.htm 用VB开发分布式应用 ◆ 213.htm 用VB设计基于代理服务器的网络计费系统 ◆ 214.htm 用VB制作文件下载程序 ◆ 215.htm 用Visual Basic 实现无线通讯 ◆ 216.htm 用Winsock制作一套聊天室和对话系统 ◆ 217.htm 远程共享显示及声音的实现 ◆ 218.htm 远程启动机器ABC API解决方案 ◆ 219.htm 远程启动机器ABC WMI解决方案 ◆ 220.htm 在VB5中利用Winsock和msDNS控件进行 ◆ 221.htm 找出计算机上当前登录入网的用户 ◆ 222.htm 用VB5 Winsock控件创建TCP(IP)客户机 服务器程序

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧