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


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

一:服务端

ServerListener listener = new ServerListener();

  1.构造函数:

    

  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.构造函数:

    

  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

封装好的socket,拿去用的更多相关文章

  1. 【webdriver自动化】将163登录邮箱的操作封装成多个方法去执行

    login_info.txt: youxiang_99@163.com,XXXX youxiang_100@163.com,XXXX main.py: #注意:编码格式 #算法: (1)定义多个方法, ...

  2. 封装Socket.BeginReceive/EndReceive支持Timeout简介

    .NET中的Socket类提供了网络通信常用的方法,分别提供了同步和异步两个版本,其中异步的实现是基于APM异步模式实现,即BeginXXX/EndXXX的方式.异步方法由于其非阻塞的特性,在需考虑程 ...

  3. 封装Socket.BeginReceive/EndReceive以支持Timeout

    Socket .NET中的Socket类提供了网络通信常用的方法,分别提供了同步和异步两个版本,其中异步的实现是基于APM异步模式实现,即BeginXXX/EndXXX的方式.异步方法由于其非阻塞的特 ...

  4. C# Socket系列一 简单的创建socket的监听

    socket的应用场景,在快速,稳定,保持长连接的数据传输代码.Http也是socket封装出来的,基于一次请求一次回复,然后断开的socket连接封装. 比如我们常见的游戏服务器,目前的很火的物联网 ...

  5. Delphi的Socket编程步骤(repulish)

    转贴自:http://topic.csdn.net/t/20010727/16/212155.html ClientSocket 和ServerSocket几个重要的属性:   1.client和se ...

  6. Delphi的Socket编程步骤

    ClientSocket 和ServerSocket几个重要的属性:   1.client和server都有port属性,需要一致才能互相通信   2.client有Address属性,使用时填写对方 ...

  7. iOS Socket 整理以及CocoaAsyncSocket、SRWebSocket源码解析(一)

    写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道 ...

  8. 揭秘Socket与底层数据传输实现

    揭秘socket 什么是socket?socket字面意思其实就是一个插口或者套接字,包含了源ip地址.源端口.目的ip地址和源端口.但是socket在那个位置呢 ,在TCP/IP网络的四层体系和OS ...

  9. 纯Socket(BIO)长链接编程的常见的坑和填坑套路

    本文章纯属个人经验总结,伪代码也是写文章的时候顺便白板编码的,可能有逻辑问题,请帮忙指正,谢谢. Internet(全球互联网)是无数台机器基于TCP/IP协议族相互通信产生的.TCP/IP协议族分了 ...

随机推荐

  1. mysql 5.5多实例部署【图解】

    mysql5.5数据库多实例部署,我们可以分以下几个步骤来完成. 1. mysql多实例的原理 2. mysql多实例的特点 3. mysql多实例应用场景 4. mysql5.5多实例部署方法 一. ...

  2. 根据上一行填充本行的空白栏位,SQL处理方式

    我在4年多前,写了一篇Excel处理空白Cell的文章,http://www.cnblogs.com/studyzy/archive/2010/04/07/1706203.html,其实在数据库中也会 ...

  3. 【JSP】JSP基础学习记录(一)—— 基础介绍以及3个编译指令

    序: 从实现到现在一直是以.net为主,但偶尔也会参与一些其他语言的项目.最近需要对一个Java Web项目进行二次开发,一直没学习过JSP所以买了几本书自学试试.参考资料为<轻量级Java E ...

  4. jquery最常用的几个方法。

    jquery使用手册:http://www.eduyo.com/doc/jquery/cheatsheet.html addClass 样式: <style> .textRed { col ...

  5. 金士顿U盘,群联PS2251-60主控,量产还原教程

    还原成一个可移动磁盘教程,只是在"分区设置"中将 "模式=21" 改为 "模式=3" 即可. 1. 打开:"MPALL_F1_90 ...

  6. su认证失败&文件夹里打开终端的方法&atom安装

    很久没用笔记本上的ubuntu,用不顺手,比在公司调教了半年多的电脑差远了.一步一步来.先解决最不顺手的三件事 1.su认证失败. 新安装的ubuntu系统是无法切换到root账户的,得做一番修改 s ...

  7. input子系统

    input子系统:      像按键.键盘.鼠标.触摸屏.游戏摇杆等设备只有输入没有输出,而且在编程实现其对应的驱动程序时会有很多重复性的代码,内核的设计者将该部分代码抽象出来,驱动工程师只需要复用该 ...

  8. ThinkPHP3.1.3源码分析---php文件压缩zlib.output_compression 和 ob_gzhandler

    问题来源:\ThinkPHP3.1.3_full\ThinkPHP\Lib\Core\App.class.php 中 init()方法      if(C('OUTPUT_ENCODE')){     ...

  9. 初涉Linux ----------> Ubuntu15.04的安装与美化

     “你玩 Linux 吗?” “什么 Linux ?” “你连 Linux 都不知道?还说是学计算机的呢...”  “干嘛要用 Linux 啊?windows多好,Linux?没兴趣” 一.  前言 ...

  10. 没学过CSS等前端的我,也想美化一下自己的博客

    随便说几句: 自己一直学的都是 C++和 Java 以及 Python语言,根本不懂高大上的 CSS 和 著名的 HTML5.感觉那些能自己设计那么漂亮的博客的朋友都好厉害.可以自己加上博客公告栏的小 ...