SuperSocket 是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架。你无须了解如何使用 Socket, 如何维护 Socket 连接和 Socket 如何工作,但是你却可以使用 SuperSocket 很容易的开发出一款 Socket 服务器端软件,例如游戏服务器,GPS 服务器, 工业控制服务和数据采集服务器等等。
其他的就不介绍了,代码里面全部都有注释。
看代码就行了,代码很少。服务器端Demo是使用WPF做的(VS2017),客户端没有,测试代码可以使用Telnet(开启方式–程序和功能–启用或关闭Windows功能–找到Telnet客户端勾选上–点击确定)。Telnet使用方法–Win+R–输入CMD–命令台输入telnet localhost 2017
注:2017是端口号
使用SuperSocket需要引入两个动态库文件。动态库可以打开VS中的工具–NuGet包管理器–管理解决方案的NuGet程序包–在浏览中搜索SuperSocket。。下载SuperSocket和SuperSocket.Engine两个库。下载之后安装既可。
服务器的初始化
using SuperSocket.SocketBase.Config;
using System.Windows;
using WpfSuperSocket.SuperSocket;
namespace WpfSuperSocket
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public static MainWindow instance;
SHZServer appServer;
ServerConfig serverConfig;
string ip = "127.0.0.1";
int prort = 2017;
public MainWindow()
{
InitializeComponent();
instance = this;
}
/// <summary>
/// 初始化服务器
/// </summary>
void Init()
{
appServer = new SHZServer();
serverConfig = new ServerConfig
{
Port = prort,
Ip = ip
};
if (!appServer.Setup(serverConfig))
{
InfoLbl.Content += "初始化失败!\r\n";
return;
}
if (!appServer.Start())
{
InfoLbl.Content += "服务器启动失败!\r\n";
return;
}
InfoLbl.Content += "启动服务器成功!\r\n";
}
/// <summary>
/// 开启服务器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click(object sender, RoutedEventArgs e)
{
Init();
}
/// <summary>
/// 关闭服务器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click_1(object sender, RoutedEventArgs e)
{
appServer.Stop();
}
/// <summary>
/// 向客户端发送消息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button_Click_2(object sender, RoutedEventArgs e)
{
SHZSession.instance.SendMessage(txtBoxMsg.Text);
}
}
}
服务器消息的处理
using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;
using System;
namespace WpfSuperSocket.SuperSocket
{
public class SHZSession : AppSession<SHZSession>
{
public static SHZSession instance;
/// <summary>
/// 新连接
/// </summary>
protected override void OnSessionStarted()
{
base.OnSessionStarted();
instance = this;
}
/// <summary>
/// 捕捉异常并输出
/// </summary>
/// <param name="e"></param>
protected override void HandleException(Exception e)
{
this.Send("\r\n Exception: {0}", e.Message);
}
/// <summary>
/// 未知的Command
/// </summary>
/// <param name="requestInfo"></param>
protected override void HandleUnknownRequest(StringRequestInfo requestInfo)
{
base.HandleUnknownRequest(requestInfo);
MainWindow.instance.Dispatcher.Invoke((Action)delegate () {
MainWindow.instance.InfoLbl.Content += "\r\n" + "Marsha:" + requestInfo.Body + "\r\n";
});
}
/// <summary>
/// 连接关闭
/// </summary>
/// <param name="reason"></param>
protected override void OnSessionClosed(CloseReason reason)
{
MainWindow.instance.Dispatcher.Invoke((Action)delegate () {
MainWindow.instance.InfoLbl.Content += "\r\n" + reason .ToString()+ "\r\n";
});
}
/// <summary>
/// 向客户端发送消息
/// </summary>
/// <param name="msg"></param>
public void SendMessage(string msg)
{
this.Send("Jack:"+msg);
MainWindow.instance.Dispatcher.Invoke((Action)delegate () {
MainWindow.instance.InfoLbl.Content += "\r\n" + "Jack:" + msg + "\r\n";
});
}
}
}
对服务器操作时,执行的一些函数
using SuperSocket.SocketBase;
using System;
namespace WpfSuperSocket.SuperSocket
{
class SHZServer:AppServer<SHZSession>
{
/// <summary>
/// 输出新连接信息
/// </summary>
/// <param name="session"></param>
protected override void OnNewSessionConnected(SHZSession session)
{
base.OnNewSessionConnected(session);
MainWindow.instance.Dispatcher.Invoke((Action)delegate () {
MainWindow.instance.InfoLbl.Content += "\r\n" + session.LocalEndPoint.Address.ToString() + ":连接\r\n";
});
}
/// <summary>
/// 输出断开连接信息
/// </summary>
/// <param name="session"></param>
/// <param name="reason"></param>
protected override void OnSessionClosed(SHZSession session, CloseReason reason)
{
base.OnSessionClosed(session, reason);
MainWindow.instance.Dispatcher.Invoke((Action)delegate () {
MainWindow.instance.InfoLbl.Content += "\r\n" + session.LocalEndPoint.Address.ToString() + ":断开连接";
});
}
/// <summary>
/// 当服务器关闭时执行
/// </summary>
protected override void OnStopped()
{
base.OnStopped();
MainWindow.instance.Dispatcher.Invoke((Action)delegate () {
MainWindow.instance.InfoLbl.Content += "\r\n" + "服务器已停止"+ "\r\n";
});
}
}
}
demo下载
链接:http://pan.baidu.com/s/1bpKjOr9 密码:d2vf