网站排名在哪里优化,青海省网站建设高端,wordpress 数据库配置错误,wordpress兼容ie6主题Tool.Net 支持的 P2P 服务器模型实例 说明服务器部分相关代码相关调用实例Tcp版本Udp版本 最后附一张思维图 说明
当前文章#xff0c;仅是Tool.Net 开源库的一个缩影。本次更新V5.0版本以上提供支持。可以提供简单实现P2P功能用于业务开发。
服务器部分相关代码
完整代码仅是Tool.Net 开源库的一个缩影。本次更新V5.0版本以上提供支持。可以提供简单实现P2P功能用于业务开发。
服务器部分相关代码
完整代码适用于自定义的场景.
using Tool.Sockets.Kernels;
using Tool.Sockets.P2PHelpr;
using Tool.Sockets.TcpHelper;
using Tool.Sockets.UdpHelper;await Console.Out.WriteLineAsync(P2P服务器·支持“TCP” OR “UDP”);static async ValueTask Completed(UserKey a1, EnServer b1, DateTime c1, string name)
{await Console.Out.WriteLineAsync($[{name}]IP:{a1} \t{b1} \t{c1:yyyy/MM/dd HH:mm:ss:fffffff});
}EnumEventQueue.OnInterceptor(EnServer.SendMsg, false);
EnumEventQueue.OnInterceptor(EnServer.Receive, false);
EnumEventQueue.OnInterceptor(EnServer.HeartBeat, false);TcpServerAsync tcpServerAsync new(NetBufferSize.Size8K, true);
UdpServerAsync udpClientAsync new(NetBufferSize.Size8K, true);string ip 0.0.0.0;
int port 11111;tcpServerAsync.SetCompleted((a1, b1, c1) Completed(a1, b1, c1, TCP));
udpClientAsync.SetCompleted((a1, b1, c1) Completed(a1, b1, c1, UDP));tcpServerAsync.SetReceived(async (receive)
{using (receive){if (P2pServerAsync.IsP2pAuth(receive.Span, out var ipnum)){string ok $[TCP]{ipnum}-{receive.Key} \t{DateTime.Now:yyyy/MM/dd HH:mm:ss:fffffff};using var sendBytes tcpServerAsync.CreateSendBytes(receive.Client, 16);sendBytes.SetMemory(P2pServerAsync.TcpTop);sendBytes.SetMemory(ipnum.Span, 4);sendBytes.SetMemory(receive.Key.Span, 10);await tcpServerAsync.SendAsync(sendBytes);await Console.Out.WriteLineAsync(ok);}}
});udpClientAsync.SetReceived(async (receive)
{using (receive){if (P2pServerAsync.IsP2pAuth(receive.Span, out var ipnum)){string ok $[UDP]{ipnum}-{receive.Key} \t{DateTime.Now:yyyy/MM/dd HH:mm:ss:fffffff};using var sendBytes udpClientAsync.CreateSendBytes(receive.Client, 16);sendBytes.SetMemory(P2pServerAsync.UdpTop);sendBytes.SetMemory(ipnum.Span, 4);sendBytes.SetMemory(receive.Key.Span, 10);await udpClientAsync.SendAsync(sendBytes);await Console.Out.WriteLineAsync(ok);}}
});await tcpServerAsync.StartAsync(ip, port);
await udpClientAsync.StartAsync(ip, port);while (Console.ReadKey(true).Key ! ConsoleKey.Escape) ;相关调用实例
Tcp版本
P2pServerAsync p2PServerAsync0 await P2pServerAsync.GetFreeTcp();
P2pServerAsync p2PServerAsync1 await P2pServerAsync.GetFreeTcp();TcpClientAsync p2PClientAsync0 new(NetBufferSize.Default, true);
var task0 p2PClientAsync0.P2PConnectAsync(p2PServerAsync0.LocalEP, p2PServerAsync1.RemoteEP);TcpClientAsync p2PClientAsync1 new(NetBufferSize.Default, true);
var task1 p2PClientAsync1.P2PConnectAsync(p2PServerAsync1.LocalEP, p2PServerAsync0.RemoteEP);Task.WaitAll(task0, task1);Udp版本
P2pServerAsync p2PServerAsync0 await P2pServerAsync.GetFreeUdp();
P2pServerAsync p2PServerAsync1 await P2pServerAsync.GetFreeUdp();UdpClientAsync p2PClientAsync0 new(NetBufferSize.Default, true);
var task0 p2PClientAsync0.P2PConnectAsync(p2PServerAsync0.LocalEP, p2PServerAsync1.RemoteEP);UdpClientAsync p2PClientAsync1 new(NetBufferSize.Default, true);
var task1 p2PClientAsync1.P2PConnectAsync(p2PServerAsync1.LocalEP, p2PServerAsync0.RemoteEP);Task.WaitAll(task0, task1);最后附一张思维图