-
两个设备局域网联机,需要用广播自动搜寻,而SuperSocket1.6的默认AppServer使用的是TCP,但只有UDP才支持广播。
-
编写自己的 “Session” 类,我这边随便写写
using
SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SuperSocketTest.src.Service.UDPServer
public class MySession : AppSession<MySession>
protected override void OnSessionStarted()
this.Send("Welcome to SuperSocket Telnet Server");
protected override void HandleUnknownRequest(StringRequestInfo requestInfo)
this.Send("Unknow request");
protected override void HandleException(Exception e)
this.Send("Application error: {0}", e.Message);
protected override void OnSessionClosed(CloseReason reason)
base.OnSessionClosed(reason);
- 接着按自己需求定义自己APPServer,这边我也随便写写(自定义的AppServer,在继承AppServer是的Session泛型,记得要更改为我们自定义的Session,这边我的是MySession)
using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Config;
using SuperSocket.SocketBase.Protocol;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SuperSocketTest.src.Service.UDPServer
class MyServer : AppServer<MySession>
public MyServer()
: base(new CommandLineReceiveFilterFactory(Encoding.Default, new BasicRequestInfoParser(":", ",")))
protected override bool Setup(IRootConfig rootConfig, IServerConfig config)
return base.Setup(rootConfig, config);
protected override void OnStopped()
base.OnStopped();
- SuperSocket 中的命令设计出来是为了处理来自客户端的请求的, 它在业务逻辑处理之中起到了很重要的作用。所以我们写一个自己的命令类。(后面好像处理不了,我也不知道怎么回事)
using SuperSocket.SocketBase.Command;
using SuperSocket.SocketBase.Protocol;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SuperSocketTest.src.Service.UDPServer
public class MyCommand : CommandBase<MySession, StringRequestInfo>
public override string Name
return "001";
public override void ExecuteCommand(MySession session, StringRequestInfo requestInfo)
session.Send("Hello,I'm UDP server! The parameter you send is " + requestInfo.Body);
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="superSocket"
type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine" />
</configSections>
<superSocket>
<servers>
<server name="SSTUDP"
serverType="SuperSocketTest.src.Service.UDPServer.MyServer,SuperSocketTest"
ip="Any" port="2020" mode="Udp">
</server>
</servers>
</superSocket>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
using SuperSocket.SocketBase;
using SuperSocket.SocketEngine;
using System;
using System.Collections.Generic;
using System.Linq;
namespace SuperSocketTest
class Program
static void
Main(string[] args)
Console.WriteLine("按任意键以启动服务器!");
Console.ReadKey();
Console.WriteLine();
var bootstrap = BootstrapFactory.CreateBootstrap();
if (!bootstrap.Initialize())
Console.WriteLine("初始化失败!请检查配置文件!");
Console.ReadKey();
return;
var result = bootstrap.Start();
Console.WriteLine("启动结果: {0}!", result);
if (result == StartResult.Failed)
Console.WriteLine("启动失败!");
Console.ReadKey();
return;
Console.WriteLine("按 ‘q’ 键停止服务器。");
while (Console.ReadKey().KeyChar != 'q')
Console.WriteLine();
continue;
Console.WriteLine();
bootstrap.Stop();
Console.WriteLine("服务器已停止!");
Console.ReadKey();
using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Config;
using SuperSocket.SocketBase.Protocol;
using SuperSocket.SocketEngine;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SuperSocketTest
class Program
static int clientCount = 0;
static void Main(string[] args)
Console.WriteLine("按任意键以启动服务器!");
Console.ReadKey();
Console.WriteLine();
var appServer = new AppServer();
if (!appServer.Setup(new ServerConfig
Ip = "Any",
Port = 2020,
Mode = SocketMode.Udp
}))
Console.WriteLine("配置服务器失败!");
Console.ReadKey();
return;
Console.WriteLine();
if (!appServer.Start())
Console.WriteLine("启动失败!");
Console.ReadKey();
return;
Console.WriteLine("服务器启动成功,按 ‘q’ 键停止服务器!");
appServer.NewSessionConnected += new SessionHandler<AppSession>(appServer_NewSessionConnected);
appServer.NewRequestReceived += new RequestHandler<AppSession, StringRequestInfo>(appServer_NewRequestReceived);
while (Console.ReadKey().KeyChar != 'q')
Console.WriteLine();
continue;
appServer.Stop();
Console.WriteLine("服务器已停止!");
Console.ReadKey();
private static void appServer_NewSessionConnected(AppSession session)
clientCount++;
session.Send("Hello,you are the " + clientCount + "th connected client!");
private static void appServer_NewRequestReceived(AppSession session, StringRequestInfo requestInfo)
switch (requestInfo.Key.ToUpper())
case ("001")://同样添加一条命令,更多命令的使用请查阅文档
session.Send("Hello,I'm UDP server! The parameter you send is " + requestInfo.Body);
break;
- 结果:

– 成功!
- 可以通过配置和代码来启动服务器。
- 代码在AppServer.Setup函数下配置。
- 文件配置在App.config文件里配置,再通过Bootstrap启动服务器。
- 对于TCP方式同样适用,只需要设置mode的值为Tcp即可。
- SuperSocket很棒!怎么三年前没有发现这个宝藏呢!
- UDP测试 V1软件:UDP收发器 Gitee
使用SuperSocket的FixedHeaderReceiveFilter进行通信,使用TCP协议.
项目中用nuget下载packages中的内容没有上传,文件太大了,自己去nuget吧.
参见博客:https://www.cnblogs.com/birds-zhu/p/11007721.html
Session对象内部封装了当前连接的相关信息,如IP地址、端口号、连接时间、请求次数等,方便开发人员进行状态管理和统计。它提供了TCP、UDP、WebSocket等多种协议支持,可以轻松构建出各种类型的网络应用程序,如游戏服务器、聊天系统、实时数据推送等。通过组合上述组件,SuperSocket框架可以支持多种协议(TCP、UDP、WebSocket等)和场景(游戏服务器、聊天系统、实时数据推送等),提供了良好的性能和扩展性。框架的各个组件都是松散耦合的,可以按需组合和替换,方便扩展和维护。
准备操作:
用superSocket接受客户端发来的UDP数据,
superSocket开源框架网址:https://github.com/kerryjiang/SuperSocket。
在NuGet中添加:SuperSocket,SuperSocket.Engine,SuperSocket.ProtoBase
用FFMPEG、V...
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java
前几个月有个项目需要和其他设备通信,需要用到TCP和UDP通信.本来开始也是用的C#原生态socket通信库,但是后来发现了一个”我不想说他名字坑爹库”,经过测试,用起来还挺顺手,就直接把这个”我不想说他名字坑爹库”引入了项目中。还把使用方法写在了博客园,测试demo还上传了代码(通讯库并没有源码,只有dll文件)。
结果,大约三个月后,有人给我留言,说他下载了”我不想说他名字坑爹库”的demo源码,并且引入了项目中,但是要收费,已经过期,他们的项目已...
什么是协议?
什么是协议? 很多人会回答 "TCP" 或者 "UDP"。 但是构建一个网络应用程序, 仅仅知道是 TCP 还是 UDP 是远远不够的。 TCP 和 UDP 是传输层协议。仅仅定义了传输层协议是不能让网络的两端进行通信的。你需要定义你的应用层通信协议把你接收到的二进制数据转化成你程序能理解的请求。
内置的命令行协议
命令行协议是一种被广泛应用的协议。一些...
什么是协议?
什么是协议? 很多人会回答 “TCP” 或者 “UDP”。 但是构建一个网络应用程序, 仅仅知道是 TCP 还是 UDP 是远远不够的。 TCP 和 UDP 是传输层协议。仅仅定义了传输层协议是不能让网络的两端进行通信的。你需要定义你的应用层通信协议把你接收到的二进制数据转化成你程序能理解的请求。
内置的命令行协议
命令行协议是一种被广泛应用的协议。一些成熟的协议如 Telnet, SMTP, POP3 和 FTP 都是基于命令行协议的。 CommandLinePipelineFilter是设
关注“脚本之家”,与百万开发者在一起作者 |kiba518出品 | 脚本之家(ID:jb51net)前言本文主要介绍TCP、Sokcket和SuperSocket的基础使用。创建实例模式的SuperSocket服务首先创建控制台项目,然后Nuget添加引用SuperSocket.Engine。然后编写服务代码,SuperSocket的服务代码主要是配置AppServer对象,因为Ap...
{}其实这里省略了,Session 和 RequestInfo,Session默认的就是AppSession ,RequestInfo默认是的StringRequestInfo。如果想构建一个Server,就必须对于构建Session 和 RequestInfo。要构建一个Session,就必须构建一个RequestInfo。/// 简单的将过来的数据进行格式化{{//消息包头部,大小端转换//正文部分//固定头含义(1:平台数据,2,表示心跳)}//接口必须实现的部分set;}