SteedNet 服务端示例代码
来源:互联网 发布:服装工艺 软件 编辑:程序博客网 时间:2024/04/29 06:50
using SteedNet.AppCommon;
using SteedNet.NetworkCommEngine;
using SteedNet.NetworkCommEngine.Protocol;
using SteedNet.NetworkCommEngine.Sockets;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace SteedNet_Server
{
class Program
{
static void Main(string[] args)
{
new MyServer().Start();
}
}
/// <summary>
/// 服务器类
/// </summary>
class MyServer
{
private int m_ConnCount = 0;
private readonly object m_lock = newobject();
/// <summary>
/// 启动服务。
/// </summary>
public void Start()
{
ISocketListener listener = newSocketListener();
// 接收数据大小
listener.Settings.SocketSettings.RecvBufferSize = 2048;
// 网络事件处理委托设置
listener.EventHandlers.OnConnected= this.Server_OnConnected;
listener.EventHandlers.OnDisconnected = this.Server_OnDisconnected;
listener.EventHandlers.OnReceived =this.Server_OnReceived;
listener.EventHandlers.OnSend =this.Server_OnSend;
ushort port = 8085;
IResult result =listener.Serve(port);
if (result.Error !=ErrorResults.None)
{
Console.WriteLine("服务启动失败。端口:{0}",port);
return;
}
else
{
Console.WriteLine("服务启动。端口:{0}",port);
}
Console.WriteLine("按任意键结束程序。");
Console.ReadKey();
listener.Close();
}
private voidServer_OnConnected(ISocketContext _SocketContext, IResult r)
{
// 增加一个数据包验证过滤器
// ProtocolResolver:过滤器使用的数据解析器,构造参数1:协议头标签,构造参数2:协议尾标签
_SocketContext.AddBufferFilter(newValidationProtocolFilter(new ProtocolResolver(10000, 20000)));
// 增加一个连接计数(不是必须的)
Interlocked.Increment(refm_ConnCount);
// 打印连接数
Console.WriteLine(string.Format("[{0}] 新增一个连接,连接总数:{1}。",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), m_ConnCount));
}
private voidServer_OnReceived(ISocketContext _SocketContext, IReadDataBuffer ioBuffer,IResult r)
{
// 如果接收到数据长度不是0,则处理
if (ioBuffer.NumBytes != 0)
{
//----------------------------- 读取数据 ----------------------------
// 标准协议处理
IProtocol protocol = newStandardProtocol(ioBuffer);
int clientID =protocol.ReadInt32(); // 读一个整数
int msgNum =protocol.ReadInt32(); // 读一个整数
string message = protocol.ReadString();// 读一个字符串
// 打印消息
Console.WriteLine("[{0}] 收到客户端数据:\r\n客户端ID:{1}\r\n消息编号:{2}\r\n消息内容:{3}",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), clientID, msgNum,message);
// ----------------------------- 结束读取-----------------------------
// ------------------------- 发送数据到服务器-------------------------
// 可写数据缓冲区
WriteDataBuffer dataBuffer =new WriteDataBuffer();
// 标准数据包
IProtocol protocolWrite = newStandardProtocol(dataBuffer);
protocolWrite.WriteInt32(msgNum+ 1); // 写入一个整数,假设是消息编号
protocolWrite.WriteString("我是服务器,这是字符串数据。");
_SocketContext.SendAsync(dataBuffer);
//----------------------------- 结束发送 -----------------------------
}
}
private voidServer_OnSend(ISocketContext _SocketContext, IWriteDataBuffer ioBuffer, IResultr)
{
Console.WriteLine("[{0}] 数据发送完成。",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
private voidServer_OnDisconnected(ISocketContext _SocketContext, IResult r)
{
//lock (m_lock)
{
Interlocked.Decrement(ref m_ConnCount);
Console.WriteLine(string.Format("[{0}] 有一个连接断开,剩余连接数:{1}。", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),m_ConnCount));
}
}
}
}
- SteedNet 服务端示例代码
- SteedNet 客户端示例代码
- jsonp服务端代码示例
- Socket tcp服务端 代码示例
- WCF服务端与客户端代码示例
- 环信服务端java集成代码示例
- 2、netty3服务端入门代码示例
- Android文件上传至tomcat,服务端+客户端示例代码
- 服务端Servlet实现文件上传的示例代码
- 2、NIO客户端和服务端示例代码(netty学习笔记)
- 跨平台Socket封装——一个服务端代码和客户端代码示例
- Ajax即时实现服务端数据验证(Asp.net 2.0)(示例代码下载)
- AjaxPro.NET框架实现服务端即时数据验证(Asp.net 2.0)(示例代码下载)
- AjaxPro.NET实现TextBox智能获取服务端数据功能(Asp.net 2.0)(示例代码下载)
- AjaxPro.NET框架实现服务端即时数据验证(Asp.net 2.0)(示例代码下载)
- AjaxPro.NET实现TextBox智能获取服务端数据功能(Asp.net 2.0)(示例代码下载)
- Ajax即时实现服务端数据验证(Asp.net 2.0)(示例代码下载)
- AjaxPro.NET框架实现服务端即时数据验证(Asp.net 2.0)(示例代码下载)
- 总结(类型判断,释放池,类别,kvo)
- thinkphp 二级域名站点 session共享(单点登录)
- GitHub上整理的一些工具
- 常用正则表达式
- 工作经验良言
- SteedNet 服务端示例代码
- 【spring-security】Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.sprin
- Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused(MongoDB启动异常)
- ld: 1 duplicate symbol for architecture arm64 clang: error: linker command failed with exit code 1
- 关于SQLServer数据库远程备份和还原的那些事儿
- 程序员看到了bug
- 【android】TabActivity实现手指左右滑动切换tab
- android平台的开源框架的思考
- Java中的代码块