转载

封装好的socket,拿去用

年终有空咯,分享一下自己封装的socket类库. 由于公司写的socket代码非常醉人,我不能忍,所以自己封装了一下方便大家使用,现在有空也分享给园友用用看,现在还存在一定的问题,等下我列出来,希望大家能帮我出一些解决方案,完善这个东东.

直接开讲,不废话了,一共3块,服务端,客户端,websocket

一:服务端

 ServerListener listener = new ServerListener(); 

1.构造函数:

封装好的socket,拿去用

2.事件:

 //日志,内部的处理日志,主要用来看流程,实际用处不大. listener.Log += listener_Log;   //listener_Log(string msg) //客户端上线 listener.ClientConnected += listener_ClientConnected;  //listener_ClientConnected(BaseClient t)  //客户端下线 listener.ClientDisconnect += listener_ClientDisconnect;  //listener_ClientDisconnect(BaseClient t) //接收到完整消息 listener.MsgRead += listener_MsgRead;   //listener_MsgRead(BaseClient t, byte[] t2)  

说明:1.Log中msg参数是执行流程的消息,  2.t是当前客户端对象,  3.t2完整消息数据

3.方法:

 //调用start启动监听; listener.Start(); //停止监听 listener.Stop();  //广播消息,msg发送的内容, //type发送到客户端类型,传null发送到所有类型 //(目前只有socket和websocket2个类型) listener.SendAll(byte[] msg, ClientType? type)  //还有一个属性 //在线客户端集合 listener.Clients 

二:客户端

 Client client = new Client(); 

1.构造函数:

封装好的socket,拿去用

2.事件

 //日志 client.Log += client_Log;  //client_Log(BaseClient t, string t2) //断开连接 client.ClientDisconnect += client_ClientDisconnect;  //client_ClientDisconnect(BaseClient t) //连接服务器成功 client.ClientConnected += client_ClientConnected;  //client_ClientConnected(BaseClient t,bool state,string msg) //发送完一条消息 client.MsgSend += client_MsgSend;  //client_MsgSend(BaseClient t)  //接收到完整消息 client.MsgRead += client_MsgRead;  //client_MsgRead(BaseClient t, byte[] t2) 

3.方法

 //启动连接服务器 client.Start(); //断开连接 client.Stop(); //发送数据 client.SendData(byte[] data) 

4.属性

 /// <summary> /// 自动重连,默认false /// </summary> public bool AutoChonglian { get; set; }  /// <summary> /// Id /// </summary> public Guid Id { get; set; }  /// <summary> /// 远程网络地址 /// </summary> public EndPoint RemoteIp{get;set;}  /// <summary> /// 本地网络地址 /// </summary> public EndPoint LocalIp{get;set;}  /// <summary> /// 客户端类型 /// </summary> public ClientType ClientType { get; private set; }  /// <summary> /// 客户端对象是否为空  /// </summary> public bool ClientIsNull{get;private set;} 

三:WebSocket

websocket已经在服务段封装好了,直接连接就能通讯,这里唯一要讲一下的就是send的时候需要注意数据长度不能超过8184,超过分段发, 还是给一段js出来 大家自己看把

 function addMsg(msg){     $("#msg").append("<p>"+msg+"</p>"); }   var websocket  = new WebSocket("ws://ip:port/"); websocket.onopen = function onOpen() {     addMsg("已连接到服务器"); };  websocket.onclose = function onClose() {     addMsg("服务器连接断开");  };   websocket.onerror = function onError() {     addMsg("连接服务器失败"); } websocket.onmessage = function onMessage(evt) {     var data = evt.data;     addMsg(data); }; websocket.SendObj = function(obj) {     return websocket.Send(obj + "⊙"); }; websocket.sendlen = 8184; //分段发送数据长度不能超过8184 websocket.Send = function (msg) {     if (websocket != null && websocket.readyState === websocket.OPEN) {         if (msg.length > websocket.sendlen) {             var sendcount = Math.ceil(msg.length / websocket.sendlen);             for (var i = 0; i < sendcount; i++) {                 var d = msg.substring(i * websocket.sendlen, websocket.sendlen * (i + 1));                 websocket.send(d);             }         } else {             websocket.send(msg);         }         return true;     } else {         addMsg("指令发送失败(与服务器断开连接)");         return false;     } };  websocket.SendObj("发送数据,一般是json字符串,反正随便你"); 

现在来说说还需要完整的地方

1.文件传输还没有做.

2.websocket 客户端发送大数据会有问题, 现在的情况  数据长度小于8184*5 不会有问题, 数据长度大于8184*10会频繁出现服务器接收数据异常问题,  这里求大神帮忙看看!!!

还有个问题 循环发送大量数据也会出现问题比如 for 20次 sendobj("1")

服务端发送大数据到客户端没有问题

完事! 不介意骗点分吧 0.0

dll下载地址: http://download.csdn.net/detail/fenglove123/9424665

原文  http://www.cnblogs.com/jio92/p/jiosocket.html
正文到此结束
Loading...