我的第一个Socket程序-SuperSocket使用入门(二)
2015-05-18 15:08
661 查看
操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操
辛辛苦苦写那么久的博客,最后手贱点了全屏富文本编辑器找上传附件的按钮,结果整个页面都卡死了,只能关掉再打开看自动保存的,尼玛的,就一个div显示内容,都找不到按钮来还原,麻痹麻痹麻痹麻痹麻痹,这恶心的IE,没心情写了,后面的是手动F12从dom中拷出来的代码,最后直接发个百度网盘的连接吧,这个富文本编辑器都没看到上传附件的按钮
接下来看下线程里的操作:
上面有一句:if (client != null) ,这里从所有的session查找sn=列表中的那个,并判断这个连接是否还在线,如果在则发送,不在则消息还存在待发送的列表中 上面我们向安卓客户端发出去了消息,什么时候我们来把这条消息从待发送列表中删掉呢?不然安卓客户端就会不停的收到这条消息,这就需要安卓客户端主动告诉我们已经收到了这条消息我们新加一个命令:
基本功能这里都已经好了,还有一个是客户端连接的心跳,客户端怎么知道当前与socket服务器连接正常?所以再加一个命令处理类:
这个心跳的消息通讯很简单,他发一个&字符,服务器响应一个$符号,这里再重申一下,服务器与客户端的通讯信息结尾都是以\r\n结束。
---------------------------------------------------------------------------------- End ---------------------------------------------------------------------------------------------------------
源码:http://pan.baidu.com/s/1bntsF3x
又看了一下仅剩的博客,妈蛋的,丢了一大半,这篇已经没法看了,直接下源码看吧,操操操操操操操操操操操操操
辛辛苦苦写那么久的博客,最后手贱点了全屏富文本编辑器找上传附件的按钮,结果整个页面都卡死了,只能关掉再打开看自动保存的,尼玛的,就一个div显示内容,都找不到按钮来还原,麻痹麻痹麻痹麻痹麻痹,这恶心的IE,没心情写了,后面的是手动F12从dom中拷出来的代码,最后直接发个百度网盘的连接吧,这个富文本编辑器都没看到上传附件的按钮
接下来看下线程里的操作:
/// <summary> /// 异步线程发送信息 /// </summary> public class ThreadSendMsg { public void DoWork() { while (true) { try { List<MsgEntity> list = GlobalWeChatMsgList.GetList(); for (int i = 0; i < list.Count; i++) { var session = list[i].session; if (session != null) { var session_client = session.AppServer.GetAllSessions(); var client = session_client.Where(c => c.SN == list[i].sn); if (client != null) { foreach (var item in client) { item.Send(list[i].msg + " " + list[i].guid.ToString() + " " + list[i].open_id + "$"); } } } } } catch (Exception ex) { LogHelper.WriteLog("线程循环出错:" + ex.Message + "------------" + DateTime.Now.ToString()); } //线程睡眠1秒 System.Threading.Thread.Sleep(2000); } } }
上面有一句:if (client != null) ,这里从所有的session查找sn=列表中的那个,并判断这个连接是否还在线,如果在则发送,不在则消息还存在待发送的列表中 上面我们向安卓客户端发出去了消息,什么时候我们来把这条消息从待发送列表中删掉呢?不然安卓客户端就会不停的收到这条消息,这就需要安卓客户端主动告诉我们已经收到了这条消息我们新加一个命令:
/// <summary> /// 客户端来这里确认收到消息 /// </summary> public class IGET : CommandBase<WeChatSession, StringRequestInfo> { public override void ExecuteCommand(WeChatSession session, StringRequestInfo requestInfo) { if (requestInfo.Parameters.Count() != 1) { session.Send("error parameters\r\n"); return; } string key = requestInfo.Parameters[0]; if (string.IsNullOrWhiteSpace(key)) { session.Send("guid is null\r\n"); return; } if (key.Substring(key.Length - 1, 1) != "$") { session.Send("error guid\r\n"); return; } try { Guid guid = new Guid(key.Substring(0, key.Length - 1)); GlobalWeChatMsgList.RemoveMsg(guid); session.Send("success\r\n"); } catch { session.Send("not validate guid\r\n"); } } }
基本功能这里都已经好了,还有一个是客户端连接的心跳,客户端怎么知道当前与socket服务器连接正常?所以再加一个命令处理类:
public class XT : CommandBase<WeChatSession, StringRequestInfo> { public override void ExecuteCommand(WeChatSession session, StringRequestInfo requestInfo) { if (requestInfo.Parameters.Count() == 1) { if (requestInfo.Parameters[0] == "&") { if (!session.isLogin|| string.IsNullOrWhiteSpace(session.SN)) session.Send("no check\r\n"); else session.Send("$\r\n"); } } } }
这个心跳的消息通讯很简单,他发一个&字符,服务器响应一个$符号,这里再重申一下,服务器与客户端的通讯信息结尾都是以\r\n结束。
---------------------------------------------------------------------------------- End ---------------------------------------------------------------------------------------------------------
源码:http://pan.baidu.com/s/1bntsF3x
又看了一下仅剩的博客,妈蛋的,丢了一大半,这篇已经没法看了,直接下源码看吧,操操操操操操操操操操操操操
相关文章推荐
- 我的第一个Socket程序-SuperSocket使用入门(一)
- 我的第一个Socket程序-SuperSocket使用入门(三)
- swift教程【入门】 使用swift REPL编写第一个swift程序
- swift教程【入门】 使用xcode playground编写第一个swift程序
- Scala基础入门(三)使用Scala IDE编写第一个Scala程序
- SuperSocket快速入门(二):启动程序以及相关的配置
- Windows mobile 开发入门—第一个程序"hello world",链接调试,模拟器的使用
- J2ME中使用Socket开发联网程序
- 第一个使用socket的源码分析
- 我的第一个socket程序 “时间服务器”
- Struts2教程1:第一个Struts2程序 ----很不错的入门文章
- 使用Flex Builder3创建第一个AIR程序
- 编写你的第一个Hibernate程序 (在Hibernate中使用oracle的sequence产生主键 )
- 编写你的第一个Hibernate程序 (在Hibernate中使用oracle的sequence产生主键 )
- 使用NeatBeans,wamp编写PHP程序入门
- 使用C/C++实现Socket聊天程序(代码+实验报告)
- 使用C/C++实现Socket聊天程序(代码+实验报告)
- 第一个Socket程序-test
- 使用myeclipse开发第一个hibernate程序
- 使用Socket的“网上对话”程序