1、使用AppSession 的Send方法就可以向连接到的客户端发送数据。服务器端代码如下。
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());
session.Send("Welcome");
}
/// <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;
var parameters=requestInfo.Parameters;
switch (key)
{
case "1":
Console.WriteLine("收到客户端信息1。");
session.Send("Received:" + key.ToString());
break;
default:
Console.WriteLine("收到key:"+key.ToString());
Console.WriteLine("收到body:" + body.ToString());
for (int i = 0; i < parameters.Length; i++)
{
Console.WriteLine("收到parameters:" + parameters[i]);
}
session.Send("Received Key:" + key.ToString());
session.Send("Received Body:" + body.ToString());
for (int i = 0; i < parameters.Length; i++)
{
session.Send("Received parameters:" + parameters[i]);
}
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()+ "客户端已下线");
}
}
}
2、通讯效果如下图。需要注意的是2和123之间必须有一个空格。
3、客户端发送数据解析。
3.1、requestInfo.Key 是请求的命令行用空格分隔开的第一部分 。
3.2、requestInfo.Parameters 是用空格分隔开的其余部分,用空格分割开的字符串数组 。
3.3、requestInfo.Body 是出了请求头之外的所有内容,是一个字符串。
3.4、数据情况如下图。