急急如律令!火速搭建一个即时通讯系统!(附源码分享——高度可移植!)
2016-01-26 15:53
507 查看
人在外包公司,身不由己!各种杂七杂八的项目都要做,又没有自己的技术沉淀,每次涉足新的项目都倍感吃力,常常现学现卖,却不免处处碰壁!当然,话说回来,也是自己的水平有限在先,一马配一鞍,无奈也只能留在外包公司。
这不,就在上一周,领导下达一个任务:3天内搭建一个即时通讯系统,与原有的办公系统集成。
我正心里犯嘀咕;“网络编程自己就只知道一点皮毛啊,还是大学选修课上听老师讲的那一点东西,别说即时通讯了,以前也就只照着书上的例子写过一个抓包工具当作业交过,彻头彻尾的小白啊,何况都毕业几年了,连“套接字”都快忘了!”
领导补充说:“这个即时通讯系统要尽快完成,之后还有别的的项目。”
我:“······好的”
没办法,就像领导常说的“有条件要上,没有条件创造条件也要上!”,临危受命,唯有逆流而上!
想都别想,写即时通讯总不能从socket写起啊,那样写出来的东西只能读书的时候当作业交给老师看下,然后记一个平时成绩,给领导看那就是找抽!
所以,只能“登高而招,顺风而呼”,园子里大神多,资源也多,找找看有没有可以参考的。(这也是我一直以来的工作方法,呵呵)
终于,看到了一篇轻量级通信引擎StriveEngine —— C/S通信demo(2) —— 使用二进制协议 (附源码)研究学习了一下,稍加揣摩,很快就完成了领导所交付的重任!在此要鸣谢该文的作者!
言归正传,接下来就把自己的学习所得以及编写过程详尽的分享给大家!
View Code
这不,就在上一周,领导下达一个任务:3天内搭建一个即时通讯系统,与原有的办公系统集成。
我正心里犯嘀咕;“网络编程自己就只知道一点皮毛啊,还是大学选修课上听老师讲的那一点东西,别说即时通讯了,以前也就只照着书上的例子写过一个抓包工具当作业交过,彻头彻尾的小白啊,何况都毕业几年了,连“套接字”都快忘了!”
领导补充说:“这个即时通讯系统要尽快完成,之后还有别的的项目。”
我:“······好的”
没办法,就像领导常说的“有条件要上,没有条件创造条件也要上!”,临危受命,唯有逆流而上!
想都别想,写即时通讯总不能从socket写起啊,那样写出来的东西只能读书的时候当作业交给老师看下,然后记一个平时成绩,给领导看那就是找抽!
所以,只能“登高而招,顺风而呼”,园子里大神多,资源也多,找找看有没有可以参考的。(这也是我一直以来的工作方法,呵呵)
终于,看到了一篇轻量级通信引擎StriveEngine —— C/S通信demo(2) —— 使用二进制协议 (附源码)研究学习了一下,稍加揣摩,很快就完成了领导所交付的重任!在此要鸣谢该文的作者!
言归正传,接下来就把自己的学习所得以及编写过程详尽的分享给大家!
一·界面快照
void tcpPassiveEngine_MessageReceived(IPEndPoint userAddress, byte[] msg) { //取出消息类型 int msgType = BitConverter.ToInt32(msg, 0); //验证消息类型 if (msgType == MsgType.Chatting) { ChatMsg chatMsg = MsgHelper.DeserializeMsg<ChatMsg>(msg); this.ShowChatForm(chatMsg.SourceUserID); this.ChatMsgReceived(chatMsg); } } /// <summary> /// 显示聊天窗 /// </summary> /// <param name="friendUserID">聊天对方用户ID</param> private void ShowChatForm(string friendUserID) { if (this.InvokeRequired) { this.Invoke(new CbGeneric<string>(this.ShowChatForm), friendUserID); } else { ChatForm form = this.chatFormManager.GetForm(friendUserID); if (form == null) { form = new ChatForm(this.selfID, friendUserID, this, this.tcpPassiveEngine); form.Text = string.Format("与{0}对话中···", friendUserID); this.chatFormManager.Add(form); form.Show(); } form.Focus(); } } /// <summary> /// 显示聊天消息 /// </summary> /// <param name="chatMsg"></param> private void ShowChatMsg(ChatMsg chatMsg) { if (this.InvokeRequired) { this.Invoke(new CbGeneric<ChatMsg>(this.formMain_chatMsgReceived), chatMsg); } else { this.richTextBox_display.AppendText(chatMsg.SourceUserID + " " + chatMsg.TimeSent.ToString() + "\r\n"); this.richTextBox_display.AppendText(chatMsg.MsgText + "\r\n"); this.richTextBox_Write.Clear(); } }
View Code
五·即时通讯源码下载
源码说明:1.客户端与服务端均含有配置文件,可配置进程的IP与端口号。 2.代码均含有详细注释。 3.调试时确保客户端的配置文件相关信息无误,先启动服务端再启动客户端。 4.登录账号与密码均为任意。 5.点击好友头像即可聊天。 下载:Chat.Demo
相关文章推荐
- Node.js 学习(六)Node.js EventEmitter
- (转)Syntax error:
- apache和tomcat有什么不同,为什么要整合apache 和tomcat?
- 编译 wireshark 2
- js的延迟函数self.setInterval()
- 微信编辑器新手入门必读
- 使用RecyclerView实现电商物流信息的时光轴效果
- Segmentation of PolSAR
- Java控制语句——for循环
- 备忘录模式
- 初学Volley
- maven 普通java项目 / war 包
- C++泛型编程(通讯录编排)
- Selector的初步认识
- AngularJS系列:5、核心概览
- 指针
- (转载)GDI+画刷Brush
- 二叉排序树的实现
- 文本预处理小结
- springMVC环境搭建-6