类似MSN、QQ这样支持表情符的聊天功能是怎么实现的?(50分)

  • 主题发起人 主题发起人 Boblee
  • 开始时间 开始时间
B

Boblee

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Delphi我写了个局域网聊天工具,支持纯文本的消息,现想让它支持表情符及字体属性(大小,颜色等),怎么实现?哪位能提供一下思路。是否用Richedit,但传输时怎么传输?对方又怎么能显示?

 
有一个空间叫fatmemo 很适合做聊天面板。

字体信息可以包含在报文首 表情如果是定义好的 就用特殊符号表示就行了 比如 :) 代表笑脸
如果是要支持自定义图片 就用某个符号表示 然后建立连接发图片
 
那这样的话,就一次谈天,如果包含表情图片,就要分两次传输了?这是不是性能上不是特别好。但还是谢谢你的思路。不知QQ和MSN怎么实现的。期待更好的解决方案。
 
自定义表情才传输2次
 
当然用richedit拉!
传输时要转换一次为你自己定义的字符,然后显示时再转换一次,这个问题我曾经考虑并实现拉,不是很难,就我说的做!!
 
在程序中给自己的表情库编号,只要每次发编号就可以了
 
To Janph:
老大,能否说得详细点。不是很理解你的意思。你的转换是转换哪些?我就举例请你说明一下你的思路。谢谢。
比如,我要传一条消息,这条消息中有几个字是红色,有几个字是蓝色,中间夹着些表情图片,有些表情图片还是用本地的小图片自定义的。这条消息,用Richedit,传输时怎么解决?最终传输的内容是什么?
 
首先要作信息编码 包含原来的文本文字,不然。。你看看倒霉的qq就知道了:)
本地小图片我觉得应该传输n次
第一次传输文字
然后传输图片
msn就是这么干的 老版本的qq表情什么的都是固定的所以仅仅是弄了个表情符号而已
 
我花了点时间找了个易用的Sniffer,下面我把我发一条带表情图片的(即有内置的,也有自定义)消息所抓的数据帖出来,大家帮我分析一下,MSN是怎么实现的。
通过sniffer可知,MSN 发一条消息,如果是纯文字的,在Sniffer上就只有一个包,如果带表情符的,它就有两个包,也就是MSN将文字与图片是分开发的。大家请看。
纯文字的消息包:(大家把它拷贝出去,开一个记事本再看,那比较好看)
0001 0 0 05 5 D 0 E 94 A 4 52 5 4 A B 1E 0 6 1B 0 8 0 0 45 0 0 .. ]. . .R T. . .. .. E .
0002 0 0 D4 B F 3 6 40 0 0 40 0 6 7 D AF C 0 A8 0 1 1 9 CF 2 E .. .6 @ .@ .} . .. .. . .

0003 6 C 4E 0 5 5 B 07 4 7 7C A 1 4 C A1 2 9 56 D E 5 C 50 1 8 lN .[ . G| .L . )V ./ P .
0004 F A 8E A A 9 4 00 0 0 4D 5 3 4 7 20 3 2 35 3 9 2 0 4E 2 0 .. .. . .M SG 25 9 N

0005 3 1 35 3 7 0 D 0A 4 D 49 4 D 4 5 2D 5 6 65 7 2 7 3 69 6 F 15 7. . MI ME - Ve rs i o
0006 6 E 3A 2 0 3 1 2E 3 0 0D 0 A 4 3 6F 6 E 74 6 5 6 E 74 2 D n: 1 . 0. .C o nt en t -

0007 5 4 79 7 0 6 5 3A 2 0 74 6 5 7 8 74 2 F 70 6 C 6 1 69 6 E Ty pe : t ex t /p la i n
0008 3 B 20 6 3 6 8 61 7 2 73 6 5 7 4 3D 5 5 54 4 6 2 D 38 0 D ; ch a rs et = UT F- 8 .

0009 0 A 58 2 D 4 D 4D 5 3 2D 4 9 4 D 2D 4 6 6F 7 2 6 D 61 7 4 .X -M M S- IM - Fo rm a t
000A 3 A 20 4 6 4 E 3D 2 5 45 3 5 2 5 41 4 5 25 3 8 4 2 25 4 5 : FN = %E 5% A E% 8B % E

000B 3 4 25 4 2 4 4 25 3 9 33 3 B 2 0 45 4 6 3D 4 9 3 B 20 4 3 4% BD % 93 ; E F= I; C
000C 4 F 3D 3 8 3 0 38 3 0 30 3 0 3 B 20 4 3 53 3 D 3 8 36 3 B O= 80 8 00 0; CS =8 6 ;

000D 2 0 50 4 6 3 D 32 0 D 0A 0 D 0 A 54 6 8 69 7 3 2 0 69 7 3 P F= 2 .. .. T hi s i s
000E 2 0 6F 6 E 6 C 79 2 0 74 6 5 7 8 74 2 0 6D 6 5 7 3 73 6 1 o nl y t ex t m es s a

000F 6 7 65 ge

有表情符的消息:MSN是先发表情符的包,再发文字包,请看
表情符包:
[0 0 05 5 D 0 E 94 A 4 52 5 4 A B 1E 0 6 1B 0 8 0 0 45 0 0 .. ]. . .R T. . .. .. E .
0002 0 1 20 C 3 0 4 40 0 0 40 0 6 7 9 95 C 0 A8 0 1 1 9 CF 2 E . .. @ .@ .y . .. .. . .

0003 6 C 4E 0 5 5 B 07 4 7 7C A 1 5 2 11 2 9 56 D F D 8 50 1 8 lN .[ . G| .R . )V .. P .
0004 F A 2F B 8 2 D 00 0 0 4D 5 3 4 7 20 3 2 37 3 2 2 0 4E 2 0 ./ .- . .M SG 27 2 N

0005 3 2 33 3 3 0 D 0A 4 D 49 4 D 4 5 2D 5 6 65 7 2 7 3 69 6 F 23 3. . MI ME - Ve rs i o
0006 6 E 3A 2 0 3 1 2E 3 0 0D 0 A 4 3 6F 6 E 74 6 5 6 E 74 2 D n: 1 . 0. .C o nt en t -

0007 5 4 79 7 0 6 5 3A 2 0 74 6 5 7 8 74 2 F 78 2 D 6 D 6D 7 3 Ty pe : t ex t /x -m m s
0008 2 D 65 6 D 6 F 74 6 9 63 6 F 6 E 0D 0 A 0D 0 A 3 A 4B 5 3 -e mo t ic on . .. .: K S

0009 0 9 3C 6 D 7 3 6E 6 F 62 6 A 2 0 43 7 2 65 6 1 7 4 6F 7 2 .< ms n ob j C re at o r
000A 3 D 22 6 C 6 9 63 6 1 6E 6 8 6 F 6E 6 7 40 6 8 6 F 74 6 D =" XXXXXXXXXX@ ho t m

000B 6 1 69 6 C 2 E 63 6 F 6D 2 2 2 0 53 6 9 7A 6 5 3 D 22 3 5 ai l. c om " S iz e= " 5
000C 3 9 30 2 2 2 0 54 7 9 70 6 5 3 D 22 3 2 22 2 0 4 C 6F 6 3 90 " T yp e= " 2" L o c

000D 6 1 74 6 9 6 F 6E 3 D 22 5 4 4 6 52 3 7 30 2 E 6 4 61 7 4 at io n =" TF R 70 .d a t
000E 2 2 20 4 6 7 2 69 6 5 6E 6 4 6 C 79 3 D 22 4 1 4 1 41 3 D " Fr i en dl y =" AA A =

000F 2 2 20 5 3 4 8 41 3 1 44 3 D 2 2 49 4 4 59 5 7 7 4 56 6 1 " SH A 1D =" I DY Wt V a
0010 7 1 2F 3 5 6 C 59 2 F 72 4 4 6 9 39 7 7 50 3 6 4 8 6E 4 1 q/ 5l Y /r Di 9 wP 6H n A

0011 4 1 78 3 3 3 4 3D 2 2 20 5 3 4 8 41 3 1 43 3 D 2 2 59 4 C Ax 34 = " SH A 1C =" Y L
0012 6 B 63 5 4 7 0 42 3 2 42 6 3 6 C 6E 6 B 32 5 7 6 2 78 3 5 kc Tp B 2B cl n k2 Wb x 5

0013 3 0 76 3 5 7 1 54 3 2 78 4 7 7 3 3D 2 2 2F 3 E 0 9 0v 5q T 2x Gs = "/ >.

文字包:
0001 0 0 05 5 D 0 E 94 A 4 52 5 4 A B 1E 0 6 1B 0 8 0 0 45 0 0 .. ]. . .R T. . .. .. E .
0002 0 1 02 C 3 0 6 40 0 0 40 0 6 7 9 B1 C 0 A8 0 1 1 9 CF 2 E .. .. @ .@ .y . .. .. . .

0003 6 C 4E 0 5 5 B 07 4 7 7C A 1 5 3 09 2 9 56 D F D 8 50 1 8 lN .[ . G| .S . )V .. P .
0004 F A 2F E 9 0 7 00 0 0 4D 5 3 4 7 20 3 2 37 3 3 2 0 4E 2 0 ./ .. . .M SG 27 3 N

0005 3 2 30 3 3 0 D 0A 4 D 49 4 D 4 5 2D 5 6 65 7 2 7 3 69 6 F 20 3. . MI ME - Ve rs i o
0006 6 E 3A 2 0 3 1 2E 3 0 0D 0 A 4 3 6F 6 E 74 6 5 6 E 74 2 D n: 1 . 0. .C o nt en t -

0007 5 4 79 7 0 6 5 3A 2 0 74 6 5 7 8 74 2 F 70 6 C 6 1 69 6 E Ty pe : t ex t /p la i n
0008 3 B 20 6 3 6 8 61 7 2 73 6 5 7 4 3D 5 5 54 4 6 2 D 38 0 D ; ch a rs et = UT F- 8 .

0009 0 A 58 2 D 4 D 4D 5 3 2D 4 9 4 D 2D 4 6 6F 7 2 6 D 61 7 4 .X -M M S- IM - Fo rm a t
000A 3 A 20 4 6 4 E 3D 2 5 45 3 5 2 5 41 4 5 25 3 8 4 2 25 4 5 : FN = %E 5% A E% 8B % E

000B 3 4 25 4 2 4 4 25 3 9 33 3 B 2 0 45 4 6 3D 4 9 3 B 20 4 3 4% BD % 93 ; E F= I; C
000C 4 F 3D 3 8 3 0 38 3 0 30 3 0 3 B 20 4 3 53 3 D 3 8 36 3 B O= 80 8 00 0; CS =8 6 ;

000D 2 0 50 4 6 3 D 32 0 D 0A 0 D 0 A 54 6 8 69 7 3 2 0 6D 6 5 P F= 2 .. .. T hi s m e
000E 7 3 73 6 1 6 7 65 2 0 77 6 9 7 4 68 2 0 65 6 D 6 F 74 6 9 ss ag e w it h e mo t i

000F 6 F 6E 3 A 4 B 53 2 8 43 7 5 7 3 74 6 F 6D 6 9 7 A 65 2 0 on :K S (C us t om iz e
0010 6 5 6D 6 F 7 4 69 6 F 6E 2 9 2 0 61 6 E 64 2 0 3 A 44 2 8 em ot i on ) a nd : D (

0011 6 2 75 6 9 6 C 74 6 9 6E 2 0 6 5 6D 6 F 74 6 9 6 F 6E 2 9 bu il t in e m ot io n )

从上面文字包也可以看出,MSN是这样处理的,先将表情符传过去,文字中的表情符用键盘快揵方式代替如上面的":KS" 和 ":D"。到对方后,再将表情符换回。
现在有个问题就是:回显消息的区域可能是用类似IE的东东,因为从包上可以看出消息格式用
的是类似XML的,但输入消息的区域是用什么东东呢?richedit? 大家一起来,找一个比较完美的解决思路。
 
后退
顶部