封装好的socket,拿去用

  年终有空咯,分享一下自己封装的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

时间: 2024-11-09 06:24:38

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

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

login_info.txt: [email protected]163.com,XXXX [email protected]163.com,XXXX main.py: #注意:编码格式 #算法: (1)定义多个方法,分别执行不同的操作 (2)拼接一个长的字符串,方法和参数用逗号(,)隔开,每个方法之间用回车键"\n"隔开 (3)将长字符串切割成这样的格式"方法名,参数",strip().split("\n") (4)用split(",

Linux组件封装(八)——Socket的封装

我们要封装Socket,首先我们需要了解Socket需要哪些要素: 1) 首先,一个套接字创建后,需要绑定一块网卡的IP,以及连接的对口号,所以我们先封装InetAddr. 在class中,仅有的一个私有成员就是struct sockaddr_in类型的一个对象,我们需要将该对象的几种赋值与创建封装到类中,这样,我们仅需传递相应的IP与port即可获得一个addr. 在这里,我们为了方便获得该addr的IP及port,封装几个将addr转化为IP及port的函数,这样我们仅需调用函数即可. 然后

封装Socket.BeginReceive/EndReceive以支持Timeout

Socket .NET中的Socket类提供了网络通信常用的方法,分别提供了同步和异步两个版本,其中异步的实现是基于APM异步模式实现,即BeginXXX/EndXXX的方式.异步方法由于其非阻塞的特性,在需考虑程序性能和伸缩性的情况下,一般会选择使用异步方法.但使用过Socket提供的异步方法的同学,应该都会注意到了Socket的异步方法是无法设置Timeout的.以Receive操作为例,Socket提供了一个ReceiveTimeout属性,但该属性设置的是同步版本的Socket.Rece

bsd socket 简单封装。支持android、ios、mac osx

cocos2d-x官方没有封装原生socket,只提供了websocket,如果我们需要socket,不同团队有不同的造轮子的方案,其中使用Asio库的比较多,但是Asio库太过于庞大,我不太想用.其实只需要简单封装一下bsd socket就好了,几十行代码而已. 注意如果在android中测试,需要添加网络访问权限,而且不能在主线程中使用. 贴一发代码,只是简单测试了下,如果有问题再慢慢完善. 1 #ifndef __cpp_test__Socket__ 2 #define __cpp_tes

分享封装好的异步Mysql动态的库(DyNetMysql.dll) + 项目源码

在做C++项目时,经常会用到Mysql数据库,Mysql接口提供给我们的数据是相当原始的,如:字段名.字段类型,字段长度等等,一般情况我们都想一种更方便获得数据 如: XXXStruct* pRecourdInfo = (const XXXStruct*)(mysql获得的数据指针); 直接转换字段对应的结构来,这样能大大方便我们使用 这个功能已经在我之前发表上一篇文章<<分享一直在维护简单实用高效的C++Socket框架Swa-server(开源+源码)>>中实现,现在是将它封装

C#应用视频教程1.3 Socket通信客户端完善

我们先把前面的代码封装成一个完整的类,因为跟网络相关的方法并不一定是建立socket的服务器和客户端,所以还是应该把两个分开,比如获取本机IP,修改本机IP,PING远程主机这些事情应该放在一个单独的类里面,而且里面的方法应该是静态的(一个应用不会需要多个实例来做上面讲的这些事情),所以我个人建议做成一个单独的类FunctionNetwork,这样可以让主程序很简洁 ? 注意可能涉及到IP地址自动获取和手动修改的方法,需要额外的DLL引用(System.Management),这部分功能暂时用不

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

写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道,希望自己能慢慢的了解一下它的这个MtProtoKit开源协议,即时通讯这一块的东西我以前写过一篇<iOS 即时通讯 + 仿微信聊天框架 + 源码>,从点击量看的出来真的这一块的东西我们的需求量还是很大,<iOS 即时通讯 + 仿微信聊天框架 + 源码>这篇文章由于自己去年也是能力有限

Delphi的Socket编程步骤(repulish)

转贴自:http://topic.csdn.net/t/20010727/16/212155.html ClientSocket 和ServerSocket几个重要的属性:   1.client和server都有port属性,需要一致才能互相通信   2.client有Address属性,使用时填写对方(server)的IP地址       几个重要的事件:       client:    OnRead事件,当client受到冲击消息时在OnRead事件中可以获得server发送过来消息.  

.Net socket服务器编程之为何也高效

说到Socket编程,肯定大部分人举手c,c++.可惜现在已没有机会去追随并达到写服务器的水平,所以将就下还是考虑c#版的Socket服务器吧. 经过一番查询,试用.一些数据和事实还是浮出水面,同时对c#版的服务器也有很大信心,下面慢慢列出. 基础知识: 1,首先socket按平台来分有两种一种是源自unix的和源自微软平台的winsock,句资料显示,winsock借鉴unix下的socket. 2,从编程模式来看有两种,同步和异步 3,按tcp协议又有短链接,长链接. 在unix中,sock