C# supersocket框架 客户端 服务端

C# supersocket框架 客户端 服务端【实例简介】C#supersocket框架客户端服务端【实例截图】文件:url80.ctfile.com/f/25127180-542410148-65072d(访问密码:551685)【核心代码】.├──SuperSocket│├──ClientTool││└──SocketTool.exe│└──Server│├──SocketServer││├──DotnetSocketClient││

大家好,欢迎来到IT知识分享网。

【实例简介】C# supersocket框架 客户端 服务端
【实例截图】

在这里插入图片描述
文件:url80.ctfile.com/f/25127180-542410148-65072d(访问密码:551685)

【核心代码】

.
├── SuperSocket
│ ├── ClientTool
│ │ └── SocketTool.exe
│ └── Server
│ ├── SocketServer
│ │ ├── DotnetSocketClient
│ │ │ ├── App.config
│ │ │ ├── DotnetSocketClient.Designer.cs
│ │ │ ├── DotnetSocketClient.cs
│ │ │ ├── DotnetSocketClient.csproj
│ │ │ ├── DotnetSocketClient.resx
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ ├── Resources.Designer.cs
│ │ │ │ ├── Resources.resx
│ │ │ │ ├── Settings.Designer.cs
│ │ │ │ └── Settings.settings
│ │ │ ├── bin
│ │ │ │ ├── Debug
│ │ │ │ │ ├── DotnetSocketClient.exe
│ │ │ │ │ ├── DotnetSocketClient.exe.config
│ │ │ │ │ ├── DotnetSocketClient.pdb
│ │ │ │ │ ├── DotnetSocketClient.vshost.exe
│ │ │ │ │ └── DotnetSocketClient.vshost.exe.config
│ │ │ │ └── Release
│ │ │ └── obj
│ │ │ └── Debug
│ │ │ ├── DesignTimeResolveAssemblyReferences.cache
│ │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ │ ├── DotnetSocketClient.DotnetSocketClient.resources
│ │ │ ├── DotnetSocketClient.Properties.Resources.resources
│ │ │ ├── DotnetSocketClient.csproj.CoreCompileInputs.cache
│ │ │ ├── DotnetSocketClient.csproj.FileListAbsolute.txt
│ │ │ ├── DotnetSocketClient.csproj.GenerateResource.Cache
│ │ │ ├── DotnetSocketClient.csprojAssemblyReference.cache
│ │ │ ├── DotnetSocketClient.csprojResolveAssemblyReference.cache
│ │ │ ├── DotnetSocketClient.exe
│ │ │ ├── DotnetSocketClient.pdb
│ │ │ ├── TempPE
│ │ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ │ ├── DotnetSockets
│ │ │ ├── App.config
│ │ │ ├── DotnetSocketServer.Designer.cs
│ │ │ ├── DotnetSocketServer.cs
│ │ │ ├── DotnetSocketServer.csproj
│ │ │ ├── DotnetSocketServer.resx
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ ├── Resources.Designer.cs
│ │ │ │ ├── Resources.resx
│ │ │ │ ├── Settings.Designer.cs
│ │ │ │ └── Settings.settings
│ │ │ ├── bin
│ │ │ │ ├── Debug
│ │ │ │ │ ├── DotnetSockets.exe
│ │ │ │ │ ├── DotnetSockets.exe.config
│ │ │ │ │ ├── DotnetSockets.pdb
│ │ │ │ │ ├── DotnetSockets.vshost.exe
│ │ │ │ │ └── DotnetSockets.vshost.exe.config
│ │ │ │ └── Release
│ │ │ └── obj
│ │ │ └── Debug
│ │ │ ├── DesignTimeResolveAssemblyReferences.cache
│ │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ │ ├── DotnetSocketServer.csproj.CoreCompileInputs.cache
│ │ │ ├── DotnetSocketServer.csproj.FileListAbsolute.txt
│ │ │ ├── DotnetSocketServer.csproj.GenerateResource.cache
│ │ │ ├── DotnetSocketServer.csprojAssemblyReference.cache
│ │ │ ├── DotnetSocketServer.csprojResolveAssemblyReference.cache
│ │ │ ├── DotnetSockets.DotnetSocketServer.resources
│ │ │ ├── DotnetSockets.InvokeDemo.resources
│ │ │ ├── DotnetSockets.Properties.Resources.resources
│ │ │ ├── DotnetSockets.csproj.FileListAbsolute.txt
│ │ │ ├── DotnetSockets.csproj.GenerateResource.Cache
│ │ │ ├── DotnetSockets.csprojResolveAssemblyReference.cache
│ │ │ ├── DotnetSockets.exe
│ │ │ ├── DotnetSockets.pdb
│ │ │ ├── SuperSocket.DotnetSocketServer.resources
│ │ │ ├── SuperSocket.Properties.Resources.resources
│ │ │ ├── TempPE
│ │ │ │ └── Properties.Resources.Designer.cs.dll
│ │ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ │ ├── Packages.dgml
│ │ ├── SocketClient
│ │ │ ├── App.config
│ │ │ ├── Form1.Designer.cs
│ │ │ ├── Form1.cs
│ │ │ ├── Form1.resx
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ ├── Resources.Designer.cs
│ │ │ │ ├── Resources.resx
│ │ │ │ ├── Settings.Designer.cs
│ │ │ │ └── Settings.settings
│ │ │ ├── SocketClient.csproj
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ ├── SocketClient.exe
│ │ │ │ ├── SocketClient.exe.config
│ │ │ │ ├── SocketClient.pdb
│ │ │ │ ├── SocketClient.vshost.exe
│ │ │ │ ├── SocketClient.vshost.exe.config
│ │ │ │ └── SocketClient.vshost.exe.manifest
│ │ │ └── obj
│ │ │ └── Debug
│ │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ │ ├── SocketClient.Form1.resources
│ │ │ ├── SocketClient.Properties.Resources.resources
│ │ │ ├── SocketClient.csproj.FileListAbsolute.txt
│ │ │ ├── SocketClient.csproj.GenerateResource.Cache
│ │ │ ├── SocketClient.exe
│ │ │ ├── SocketClient.pdb
│ │ │ ├── TempPE
│ │ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ │ ├── SocketServer
│ │ │ ├── App.config
│ │ │ ├── Form1.Designer.cs
│ │ │ ├── Form1.cs
│ │ │ ├── Form1.resx
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ ├── Resources.Designer.cs
│ │ │ │ ├── Resources.resx
│ │ │ │ ├── Settings.Designer.cs
│ │ │ │ └── Settings.settings
│ │ │ ├── SocketServer.csproj
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ ├── SocketServer.exe
│ │ │ │ ├── SocketServer.exe.config
│ │ │ │ ├── SocketServer.pdb
│ │ │ │ ├── SocketServer.vshost.exe
│ │ │ │ ├── SocketServer.vshost.exe.config
│ │ │ │ └── SocketServer.vshost.exe.manifest
│ │ │ └── obj
│ │ │ └── Debug
│ │ │ ├── DesignTimeResolveAssemblyReferences.cache
│ │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ │ ├── SocketServer.Form1.resources
│ │ │ ├── SocketServer.Properties.Resources.resources
│ │ │ ├── SocketServer.csproj.FileListAbsolute.txt
│ │ │ ├── SocketServer.csproj.GenerateResource.Cache
│ │ │ ├── SocketServer.csprojResolveAssemblyReference.cache
│ │ │ ├── SocketServer.exe
│ │ │ ├── SocketServer.pdb
│ │ │ ├── TempPE
│ │ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ │ ├── SocketServer.sln
│ │ ├── SocketServer.sln.DotSettings.user
│ │ ├── SocketServer.v12.suo
│ │ ├── SuperSocket
│ │ │ ├── App.config
│ │ │ ├── Config
│ │ │ │ ├── log4net.config
│ │ │ │ └── log4net.unix.config
│ │ │ ├── Form1.Designer.cs
│ │ │ ├── Form1.cs
│ │ │ ├── Form1.resx
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ ├── Resources.Designer.cs
│ │ │ │ ├── Resources.resx
│ │ │ │ ├── Settings.Designer.cs
│ │ │ │ └── Settings.settings
│ │ │ ├── ServerConfig.xml
│ │ │ ├── SuperSocketServer.Designer.cs
│ │ │ ├── SuperSocketServer.cs
│ │ │ ├── SuperSocketServer.csproj
│ │ │ ├── SuperSocketServer.csproj.user
│ │ │ ├── SuperSocketServer.resx
│ │ │ ├── SuperSocketTool.cs
│ │ │ ├── bin
│ │ │ │ ├── Debug
│ │ │ │ │ ├── SuperSocket.Common.dll
│ │ │ │ │ ├── SuperSocket.Common.xml
│ │ │ │ │ ├── SuperSocket.Facility.dll
│ │ │ │ │ ├── SuperSocket.Facility.xml
│ │ │ │ │ ├── SuperSocket.SocketBase.dll
│ │ │ │ │ ├── SuperSocket.SocketBase.xml
│ │ │ │ │ ├── SuperSocket.SocketEngine.dll
│ │ │ │ │ ├── SuperSocket.SocketEngine.xml
│ │ │ │ │ ├── SuperSocket.SocketService.exe
│ │ │ │ │ ├── SuperSocket.exe
│ │ │ │ │ ├── SuperSocket.exe.config
│ │ │ │ │ ├── SuperSocket.pdb
│ │ │ │ │ ├── SuperSocket.vshost.exe
│ │ │ │ │ ├── SuperSocket.vshost.exe.config
│ │ │ │ │ ├── SuperSocket.vshost.exe.manifest
│ │ │ │ │ ├── log4net.dll
│ │ │ │ │ └── log4net.xml
│ │ │ │ └── Release
│ │ │ ├── obj
│ │ │ │ └── Debug
│ │ │ │ ├── DesignTimeResolveAssemblyReferences.cache
│ │ │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ │ │ ├── SuperSocket.Form1.resources
│ │ │ │ ├── SuperSocket.Properties.Resources.resources
│ │ │ │ ├── SuperSocket.SuperSocketServer.resources
│ │ │ │ ├── SuperSocket.csproj.FileListAbsolute.txt
│ │ │ │ ├── SuperSocket.csproj.GenerateResource.Cache
│ │ │ │ ├── SuperSocket.csprojResolveAssemblyReference.cache
│ │ │ │ ├── SuperSocket.exe
│ │ │ │ ├── SuperSocket.pdb
│ │ │ │ ├── SuperSocketServer.csproj.CopyComplete
│ │ │ │ ├── SuperSocketServer.csproj.CoreCompileInputs.cache
│ │ │ │ ├── SuperSocketServer.csproj.FileListAbsolute.txt
│ │ │ │ ├── SuperSocketServer.csproj.GenerateResource.cache
│ │ │ │ ├── SuperSocketServer.csprojAssemblyReference.cache
│ │ │ │ ├── SuperSocketServer.csprojResolveAssemblyReference.cache
│ │ │ │ ├── TempPE
│ │ │ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ │ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ │ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ │ │ ├── packages.config
│ │ │ ├── supersocket.cmd
│ │ │ └── supersocket.sh
│ │ ├── SuperSocketClient
│ │ │ ├── App.config
│ │ │ ├── Program.cs
│ │ │ ├── Properties
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── SuperScoketClient.Designer.cs
│ │ │ ├── SuperScoketClient.cs
│ │ │ ├── SuperSocketClient.csproj
│ │ │ ├── bin
│ │ │ │ └── Debug
│ │ │ │ ├── SuperSocketClient.exe
│ │ │ │ ├── SuperSocketClient.exe.config
│ │ │ │ ├── SuperSocketClient.pdb
│ │ │ │ ├── SuperSocketClient.vshost.exe
│ │ │ │ ├── SuperSocketClient.vshost.exe.config
│ │ │ │ └── SuperSocketClient.vshost.exe.manifest
│ │ │ └── obj
│ │ │ └── Debug
│ │ │ ├── DesignTimeResolveAssemblyReferences.cache
│ │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ │ ├── SuperSocketClient.csproj.CoreCompileInputs.cache
│ │ │ ├── SuperSocketClient.csproj.FileListAbsolute.txt
│ │ │ ├── SuperSocketClient.csprojAssemblyReference.cache
│ │ │ ├── SuperSocketClient.csprojResolveAssemblyReference.cache
│ │ │ ├── SuperSocketClient.exe
│ │ │ ├── SuperSocketClient.pdb
│ │ │ ├── TempPE
│ │ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ │ └── packages
│ │ ├── SuperSocket.1.6.6.1
│ │ │ ├── SuperSocket.1.6.6.1.nupkg
│ │ │ └── lib
│ │ │ ├── net35
│ │ │ │ ├── SuperSocket.Common.XML
│ │ │ │ ├── SuperSocket.Common.dll
│ │ │ │ ├── SuperSocket.Facility.XML
│ │ │ │ ├── SuperSocket.Facility.dll
│ │ │ │ ├── SuperSocket.SocketBase.XML
│ │ │ │ └── SuperSocket.SocketBase.dll
│ │ │ ├── net40
│ │ │ │ ├── SuperSocket.Common.XML
│ │ │ │ ├── SuperSocket.Common.dll
│ │ │ │ ├── SuperSocket.Facility.XML
│ │ │ │ ├── SuperSocket.Facility.dll
│ │ │ │ ├── SuperSocket.SocketBase.XML
│ │ │ │ └── SuperSocket.SocketBase.dll
│ │ │ └── net45
│ │ │ ├── SuperSocket.Common.XML
│ │ │ ├── SuperSocket.Common.dll
│ │ │ ├── SuperSocket.Facility.XML
│ │ │ ├── SuperSocket.Facility.dll
│ │ │ ├── SuperSocket.SocketBase.XML
│ │ │ └── SuperSocket.SocketBase.dll
│ │ ├── SuperSocket.Engine.1.6.6.1
│ │ │ ├── SuperSocket.Engine.1.6.6.1.nupkg
│ │ │ ├── content
│ │ │ │ ├── Config
│ │ │ │ │ ├── log4net.config
│ │ │ │ │ └── log4net.unix.config
│ │ │ │ ├── supersocket.cmd
│ │ │ │ └── supersocket.sh
│ │ │ └── lib
│ │ │ ├── net35
│ │ │ │ ├── SuperSocket.SocketEngine.XML
│ │ │ │ ├── SuperSocket.SocketEngine.dll
│ │ │ │ └── SuperSocket.SocketService.exe
│ │ │ ├── net40
│ │ │ │ ├── SuperSocket.SocketEngine.XML
│ │ │ │ ├── SuperSocket.SocketEngine.dll
│ │ │ │ └── SuperSocket.SocketService.exe
│ │ │ └── net45
│ │ │ ├── SuperSocket.SocketEngine.XML
│ │ │ ├── SuperSocket.SocketEngine.dll
│ │ │ └── SuperSocket.SocketService.exe
│ │ ├── log4net.2.0.3
│ │ │ ├── lib
│ │ │ │ ├── net10-full
│ │ │ │ │ ├── log4net.dll
│ │ │ │ │ └── log4net.xml
│ │ │ │ ├── net11-full
│ │ │ │ │ ├── log4net.dll
│ │ │ │ │ └── log4net.xml
│ │ │ │ ├── net20-full
│ │ │ │ │ ├── log4net.dll
│ │ │ │ │ └── log4net.xml
│ │ │ │ ├── net35-client
│ │ │ │ │ ├── log4net.dll
│ │ │ │ │ └── log4net.xml
│ │ │ │ ├── net35-full
│ │ │ │ │ ├── log4net.dll
│ │ │ │ │ └── log4net.xml
│ │ │ │ ├── net40-client
│ │ │ │ │ ├── log4net.dll
│ │ │ │ │ └── log4net.xml
│ │ │ │ └── net40-full
│ │ │ │ ├── log4net.dll
│ │ │ │ └── log4net.xml
│ │ │ └── log4net.2.0.3.nupkg
│ │ └── repositories.config
│ └── SocketServer.rar
└── 好例子网_SuperSocket.rar

72 directories, 260 files
类型的定义
UDT的两种类型是怎么定义的呢?

翻看com.barchart.udt包,可以发现这两种类型定义在TypeUDT枚举类中。

STREAM(1),
DATAGRAM(2), 

一个叫做STREAM,它的code是1。一个叫做DATAGRAM,他的code是2.

根据两个不同的类型我们可以创建不同的selectorProvider和channelFactory。而这两个正是构建netty服务所需要的。

在NioUdtProvider这个工具类中,netty为我们提供了TypeUDT和KindUDT的六种组合ChannelFactory,他们分别是:

用于Stream的:BYTE_ACCEPTOR,BYTE_CONNECTOR,BYTE_RENDEZVOUS。

和用于Message的:MESSAGE_ACCEPTOR,MESSAGE_CONNECTOR和MESSAGE_RENDEZVOUS。

同样的,还有两个对应的SelectorProvider,分别是:

BYTE_PROVIDER 和 MESSAGE_PROVIDER.
搭建UDT stream服务器
如果要搭建UDT stream服务器,首先需要使用NioUdtProvider.BYTE_PROVIDER来创建NioEventLoopGroup:

    final NioEventLoopGroup acceptGroup = new NioEventLoopGroup(1, acceptFactory, NioUdtProvider.BYTE_PROVIDER);
    final NioEventLoopGroup connectGroup = new NioEventLoopGroup(1, connectFactory, NioUdtProvider.BYTE_PROVIDER);

这里,我们创建两个eventLoop,分别是acceptLoop和connectLoop。

接下来就是在ServerBootstrap中绑定上面的两个group,并且指定channelFactory。这里我们需要NioUdtProvider.BYTE_ACCEPTOR:

final ServerBootstrap boot = new ServerBootstrap();
boot.group(acceptGroup, connectGroup)
.channelFactory(NioUdtProvider.BYTE_ACCEPTOR)
.option(ChannelOption.SO_BACKLOG, 10)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer() {

@Override
public void initChannel(final UdtChannel ch) {

ch.pipeline().addLast(
new LoggingHandler(LogLevel.INFO),
new UDTByteEchoServerHandler());
}
});
就这么简单。

搭建UDT message服务器
搭建UDT message服务器的步骤和stream很类似,不同的是需要使用NioUdtProvider.MESSAGE_PROVIDER作为selectorProvider:

    final NioEventLoopGroup acceptGroup =
            new NioEventLoopGroup(1, acceptFactory, NioUdtProvider.MESSAGE_PROVIDER);
    final NioEventLoopGroup connectGroup =
            new NioEventLoopGroup(1, connectFactory, NioUdtProvider.MESSAGE_PROVIDER);

然后在绑定ServerBootstrap的时候使用NioUdtProvider.MESSAGE_ACCEPTOR作为channelFactory:

final ServerBootstrap boot = new ServerBootstrap();
boot.group(acceptGroup, connectGroup)
.channelFactory(NioUdtProvider.MESSAGE_ACCEPTOR)
.option(ChannelOption.SO_BACKLOG, 10)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer() {

@Override
public void initChannel(final UdtChannel ch)
throws Exception {

ch.pipeline().addLast(
new LoggingHandler(LogLevel.INFO),
new UDTMsgEchoServerHandler());
}
});
同样很简单。

Stream和Message的handler
不同的UDT类型,需要使用不同的handler。

对于Stream来说,它的底层是byte,所以我们的消息处理也是以byte的形式进行的,我们以下面的方式来构建message:

private final ByteBuf message;
message = Unpooled.buffer(UDTByteEchoClient.SIZE);
message.writeBytes(“www.flydean.com”.getBytes(StandardCharsets.UTF_8));
然后使用ctx.writeAndFlush(message)将其写入到channel中。

对于message来说,它实际上格式对ByteBuf的封装。netty中有个对应的类叫做UdtMessage:

public final class UdtMessage extends DefaultByteBufHolder
UdtMessage是一个ByteBufHolder,所以它实际上是一个ByteBuf的封装。

我们需要将ByteBuf封装成UdtMessage:

private final UdtMessage message;
final ByteBuf byteBuf = Unpooled.buffer(UDTMsgEchoClient.SIZE);
byteBuf.writeBytes(“www.flydean.com”.getBytes(StandardCharsets.UTF_8));
message = new UdtMessage(byteBuf);
然后将这个UdtMessage发送到channel中:

ctx.writeAndFlush(message);
这样你就学会了在UDT协议中使用stream和message两种数据类型了。

总结
大家可能觉得不同的数据类型原来实现起来这么简单。这全都要归功于netty优秀的封装和设计。

感谢netty!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21663.html

(0)
上一篇 2024-01-16 15:15
下一篇 2024-01-17 13:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信