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


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

一:服务端

  1. ServerListener listener = new ServerListener();

  1.构造函数:

    

  2.事件:

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

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

  3.方法:

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

二:客户端

  1. Client client = new Client();

  1.构造函数:

    

  2.事件

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

  3.方法

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

  4.属性

  1. /// <summary>
  2. /// 自动重连,默认false
  3. /// </summary>
  4. public bool AutoChonglian { get; set; }
  5.  
  6. /// <summary>
  7. /// Id
  8. /// </summary>
  9. public Guid Id { get; set; }
  10.  
  11. /// <summary>
  12. /// 远程网络地址
  13. /// </summary>
  14. public EndPoint RemoteIp{get;set;}
  15.  
  16. /// <summary>
  17. /// 本地网络地址
  18. /// </summary>
  19. public EndPoint LocalIp{get;set;}
  20.  
  21. /// <summary>
  22. /// 客户端类型
  23. /// </summary>
  24. public ClientType ClientType { get; private set; }
  25.  
  26. /// <summary>
  27. /// 客户端对象是否为空
  28. /// </summary>
  29. public bool ClientIsNull{get;private set;}

三:WebSocket

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

  1. function addMsg(msg){
  2. $("#msg").append("<p>"+msg+"</p>");
  3. }
  4.  
  5. var websocket = new WebSocket("ws://ip:port/");
  6. websocket.onopen = function onOpen() {
  7. addMsg("已连接到服务器");
  8. };
  9. websocket.onclose = function onClose() {
  10. addMsg("服务器连接断开");
  11. };
  12. websocket.onerror = function onError() {
  13. addMsg("连接服务器失败");
  14. }
  15. websocket.onmessage = function onMessage(evt) {
  16. var data = evt.data;
  17. addMsg(data);
  18. };
  19. websocket.SendObj = function(obj) {
  20. return websocket.Send(obj + "⊙");
  21. };
  22. websocket.sendlen = 8184; //分段发送数据长度不能超过8184
  23. websocket.Send = function (msg) {
  24. if (websocket != null && websocket.readyState === websocket.OPEN) {
  25. if (msg.length > websocket.sendlen) {
  26. var sendcount = Math.ceil(msg.length / websocket.sendlen);
  27. for (var i = 0; i < sendcount; i++) {
  28. var d = msg.substring(i * websocket.sendlen, websocket.sendlen * (i + 1));
  29. websocket.send(d);
  30. }
  31. } else {
  32. websocket.send(msg);
  33. }
  34. return true;
  35. } else {
  36. addMsg("指令发送失败(与服务器断开连接)");
  37. return false;
  38. }
  39. };
  40.  
  41. 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. 神奇的expect

    想写自动化脚本的时候,遇到需要交互的,如ssh,scp,就束手无策,直到我知道了expect. expect 有一系列expect-send对组成,就像聊天一样. expect A send B ex ...

  2. linux vi编辑器操作手册

    简介 Linux下的文本编辑器有很多种,vi 是最常用的,也是各版本Linux的标配.注意,vi 仅仅是一个文本编辑器,可以给字符着色,可以自动补全,但是不像 Windows 下的 word 有排版功 ...

  3. SVN报Previous operation has not finished; run 'cleanup' if it was interrupted错误的解决方法

    做着项目突然SVN报Previous operation has not finished; run 'cleanup' if it was interrupted,进度又要继续,烦.百度一下发现很多 ...

  4. css常见的易混淆属性和值的区别(一)

    css的属性很多,每一个属性的值也很多,组合起来便有成千上万种.不同属性之间的相互组合也可以产生不同的样式,css真是一种优美的样式设计语言.下面对工作中常见的易混淆的属性和值进行总结: 1. lin ...

  5. NOIP2014pj子矩阵[搜索|DP]

    题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第2.4行和第2.4.5列交叉位置的元素 ...

  6. windows 如何查看端口占用情况?

    原文来自:http://www.iteye.com/topic/1117270 开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这 ...

  7. 在Ubuntu14.04下安装vsftp服务器

    猜想在Ubuntu下搭建ftp服务器来实现windows和ubuntu下文件互传是一件很简单的事儿,但是在网上找了好几篇文章都不行,故自己在这里总结一下方法. 首先安装vsftp服务器 sudo ap ...

  8. jmeter-HTTP COOKIE Manager

    http://wangsheng14591.blog.163.com/blog/static/327797102012829101351887/

  9. MySQL 基础语句的练习

    -- *** ①.对数据库的操作 *** -- -- 查看所有的数据库 SHOW DATABASES; -- 创建数据库 CREATE DATABASE day1026 DEFAULT CHARACT ...

  10. java 25 - 2 网络编程之 网络通信三要素

    网络通信三要素 IP地址: InetAddress 网络中设备的标识,不易记忆,可用主机名(计算机的标识号) 端口号: 用于标识进程的逻辑地址,不同进程的标识(正在运行的软件的标识号) 传输协议: 通 ...