1、客户端连接服务器事件,NewSessionConnected。
2、服务器接收到客户端发送来的数据事件,NewRequestReceived。
3、客户端与服务器连接断开事件,SessionClosed。
4、注意SuperSocket规定客户端给服务器发送的报文必须以"\r\n"为结束符,否则服务器会认为是非法报文不预处理。
4.1、使用Serial Port Utility时需要先设置一下,如下图。
4.2、在发送数据的1或2后面点一下回车然后再发送数据。
5、服务端代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//引入命名空间
using SuperSocket.Common;
using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
//创建一个AppServer实例
var appServer = new AppServer();
//安装和监听端口
if (!appServer.Setup(2024))
{
//输出失败信息
Console.WriteLine("安装和监听端口失败!");
//等待用户输入
Console.ReadKey();
return;
}
Console.WriteLine("安装和监听端口成功,请输入Start开启服务器");
while (!Console.ReadLine().Equals("Start"))
{
Console.WriteLine();
continue;
}
//启动AppServer实例
if (!appServer.Start())
{
//输出失败信息
Console.WriteLine("启动AppServer实例失败!");
Console.ReadKey();
return;
}
Console.WriteLine("服务器启动成功,请输入Stop停止服务器");
// 客户端连接服务器事件
appServer.NewSessionConnected += AppServer_NewSessionConnected;
// 接收到客户端发送的数据
appServer.NewRequestReceived += AppServer_NewRequestReceived;
// 客户端关闭
appServer.SessionClosed += AppServer_SessionClosed;
while (!Console.ReadLine().Equals("Stop"))
{
Console.WriteLine();
continue;
}
appServer.Stop();
Console.WriteLine("服务器已停止。");
Console.ReadKey();
}
/// <summary>
/// 客户端连接服务器事件
/// </summary>
/// <param name="session"></param>
private static void AppServer_NewSessionConnected(AppSession session)
{
Console.WriteLine("新客户端已连接IP地址为:" + session.RemoteEndPoint.Address.ToString());
}
/// <summary>
/// 接收到客户端发送的数据
/// </summary>
/// <param name="session"></param>
/// <param name="requestInfo"></param>
private static void AppServer_NewRequestReceived(AppSession session, StringRequestInfo requestInfo)
{
var key = requestInfo.Key;
var body = requestInfo.Body;
switch (key)
{
case "1":
Console.WriteLine("收到客户端信息1。");
break;
default:
Console.WriteLine("收到客户端信息。"+key.ToString());
break;
}
}
/// <summary>
/// 客户端关闭
/// </summary>
/// <param name="session"></param>
/// <param name="value"></param>
private static void AppServer_SessionClosed(AppSession session, CloseReason value)
{
Console.WriteLine("IP地址为:" + session.RemoteEndPoint.Address.ToString()+ "客户端已下线");
}
}
}