65.9K
CodeProject 正在变化。 阅读更多。
Home

YCC Trainer – Yahoo! Messenger 教程

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.64/5 (10投票s)

2007年5月21日

GPL3

4分钟阅读

viewsIcon

104337

downloadIcon

3781

YCC Trainer 是一个示例应用程序, 向您展示如何为 Yahoo! Messenger 协议编程

Screenshot - YCC_Trainer_main.gif

引言

YCC Trainer 旨在教授编写自己的 Yahoo! Messenger 客户端所需的逻辑。YCC Trainer 面向经验较少或中等水平的程序员,并要求其理解 .NET 语言。YCC Trainer 使用 Visual Basic .NET 2005 编写,是 Yahoo! Coder's Cookbook ( www.ycoderscookbook.com ) 的一个大型项目的一部分,该项目旨在教您关于 Yahoo! Messenger 协议的一切知识。YCC Trainer 使用的 Yahoo! Messenger 协议版本为 15。

YCC Trainer 程序结构

YCC Trainer 目前包含两个不同的项目:前端 GUI 和后端协议引擎。后端被设计成分离于 GUI,可用于任何数量的任务。由于 YCC Trainer 的目标是展示 Yahoo! Messenger 协议的工作原理,我将主要关注名为 YCC_YMSG_Functions 的后端。

Screenshot - YCC_Trainer_program.gif

YCC_YMSG_Functions

YCC_YMSG_Functions 包含四个模块:modUsermodYFunctionsmodByteFunctionsmodSockets。唯一需要访问的模块是 modUser,因为所有状态数据、函数调用和事件都驻留在该模块中。

Screenshot - YCC_Trainer_YMSG.gif

YCC_YMSG_Functions 中的所有高级通信都包含在一个名为 uPacket 的结构中。uPacket 包含所有头部信息和有效载荷,是一个易于访问的结构,无需手动解析信息。将数据包转换为原始字节数据以及反之的过程包含在 modYFunctions 中。发送 YMSG 消息时,应调用 modYFunctions.PacketToByte;接收 YMSG 消息时,应通过调用 modYFunctions.ByteToPacket 将其转换为 uPacket。第三个模块 modByteFunctions 包含用于字节操作的方法,例如字节连接,这在 YCC_YMSG_Functions 中广泛使用。最后,modSockets 是网络接口模块,负责将字节数据转换为异步 Windows API 套接字。

由于 Yahoo! Messenger 协议中的通信是异步的,数据可以独立且随时发送和接收。要发送数据,只需调用 modUsers 中相应的函数。接收数据更复杂,但由 socket_receivemodUser_ProcessPacket 函数处理。socket_receive 处理 YMSG 数据包可能包含的所有特殊情况,而 modUser_ProcessPacket 则针对特定的 YMSG 服务采取行动。

创建 GUI

创建 modUser 前端的第一步是创建 YCC_YMSG_Functions 的新实例。完成此操作后,调用 modUser.Login。在这种情况下,Login 可以被视为 New 函数,因为它初始化了 YCC_YMSG_Functions 的实例,使其准备好完全运行。Login 函数也很特别,因为它启动了验证用户 against Yahoo! 服务器所需的数据包序列。一旦 AuthResp 数据包被正确发送,您就可以认为您的用户已成功登录 Yahoo!

Dim yUser As New YCC_YMSG_Functions.modUser
Dim UserData As New YCC_YMSG_Functions.modUser.uUserData
Dim ServerData As New YCC_YMSG_Functions.modUser.uServerData
_YUser = yUser

AddHandler yUser.PacketRecieved, AddressOf debug.modUser_PacketRecieved
AddHandler yUser.PacketSent, AddressOf debug.modUser_PacketSent
AddHandler yUser.LoginFail, AddressOf yUser_LoginFail
AddHandler yUser.NewMail, AddressOf yUser_NewMail
AddHandler yUser.BuddyListUpdate, AddressOf yUser_BuddyListUpdate
AddHandler yUser.ErrorMessage, AddressOf yUser_ErrorMessage
AddHandler yUser.MessageRecieve, AddressOf yUser_MessageRecieve
AddHandler yUser.NotifyRecieve, AddressOf yUser_NotifyRecieve

'Set the user data here such as server, port, etc.

yUser.Login(UserData, ServerData)

在创建 yUser 的新实例时,还应为 modUser 可能触发的许多事件添加处理程序。其中一些包括 LogonSuccessLogonFailBuddyListUpdateNewMail

主页

YCC Trainer 和许多其他有用程序都托管在 Yahoo! Coder's Cookbook ( http://ycoderscookbook.com )。 http://ycoderscookbook.com/YCC_Trainer.htm 是 YCC Trainer 的主页,论坛位于 http://ycoderscookbook.com/forums。Yahoo! Coder's Cookbook 还提供了一个完整的教程部分,解释了 Yahoo! Messenger 协议的大部分内容,一个定期更新的博客,Messenger 的其他代码示例,等等。

历史

1.0.0.1

  • 它现在将完全登录。AuthResp 期间的编程错误未能正确处理响应挑战字符串
  • 使用 YMSG 协议版本 15
  • 新的程序结构。高级数据单位现在是 uPacket
  • 可以处理 TCP 数据包内的多个 YMSG 数据包
  • 可以处理跨越多个 TCP 数据包的 YMSG 消息
  • 好友列表已正确实现
  • 单独的忽略列表
  • 隐身登录
  • 基本消息处理和通知消息
  • 一些实验性过程。目前没有值得报告的有趣内容
  • 还有很多,但这些是主要的修复

1.0.0.0

  • 首次发布

待办事项

  • 目前调试窗口应视为损坏。它完成了最基本的工作,但我在演示文稿方面还有很多工作要做。我还实现了一个自定义队列数据结构。默认大小为 25,我尚未测试过此限制。如果发送或接收的消息超过 25 条后崩溃,这很可能就是原因。
  • 实现自定义数据包生成器
  • 能够更新好友列表状态
  • 添加、接受或删除好友
  • 注销时存在一个错误。显然,服务器发送的是 **** 而不是 YMSG
© . All rights reserved.