internal class Program
{
//static void Main(string[] args)
//{ // byte[] arr = new byte[1024]; // 1.创建socket对象
// Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // IPAddress address = IPAddress.Parse("127.0.0.1");
// int port = 8000;
// int port = 40410;
// socket.Connect(address, port); // while (true)
// {
// string v = Guid.NewGuid().ToString() + "\r\n"; // byte[] bytes = Encoding.UTF8.GetBytes(v); // socket.Send(bytes); // Console.WriteLine($"svr2 输出:{v}"); // Thread.Sleep(3000); // 接收
// socket.Receive(arr);
// string v2 = Encoding.UTF8.GetString(arr);
// Console.WriteLine($"svr2 收到:{v2}"); // } //} private static AsyncTcpSession client;
static System.Timers.Timer timer = null;
private int port = 40410; static void Main(string[] args)
{
new Program().Link();
string input = Console.ReadLine();
while (input != "exit" && !string.IsNullOrEmpty(input))
{
if (client != null && client.IsConnected)
{
var msg = System.Text.Encoding.Default.GetBytes("echo hello " + input + "\r\n");
client.Send(msg, 0, msg.Length);
input = Console.ReadLine();
} }
}
private void Link()
{
client = new AsyncTcpSession();
client.Connected += OnClientConnected;
client.Error += OnClientError;
client.Closed += OnClientClosed;
// 收到服务器数据事件
client.DataReceived += client_DataReceived; //每10s发送一次心跳或尝试一次重连
timer = new System.Timers.Timer(10000);
timer.Elapsed += new System.Timers.ElapsedEventHandler((s, x) =>
{
//心跳包
if (client.IsConnected)
{
var heartMsg = System.Text.Encoding.Default.GetBytes("echo heart 2\r\n");
client.Send(heartMsg, 0, heartMsg.Length);
}
//断线重连
else if (!client.IsConnected)
{
client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), port));
}
});
timer.Enabled = true;
timer.Start(); }
private void OnClientConnected(object sender, EventArgs e)
{
Console.WriteLine("已连接" + '\n');
}
private void OnClientClosed(object sender, EventArgs e)
{
Console.WriteLine("已断开" + '\n');
}
private void OnClientError(object sender, ErrorEventArgs e)
{
Console.WriteLine($"错误:{e.Exception.Message}" + '\n');
}
void client_DataReceived(object sender, DataEventArgs e)
{
string msg = Encoding.UTF8.GetString(e.Data);
Console.WriteLine("客户端接收:"+msg.Trim('\0'));
} }
}
internal class Program
{
private static async Task Main(string[] args)
{
var host = SuperSocketHostBuilder
.Create<StringPackageInfo, CommandLinePipelineFilter>()
.UsePackageHandler(async (session, package) =>
{
var result = 0; string? v = package.Key.ToString();
string? body = package.Body.ToString();
Console.WriteLine($"服务端 接收 key: {v}");
Console.WriteLine($"服务端 接收 value: {body}"); string v1 = $"hello 我收到: {v} {body}";
Console.WriteLine(v1);
await session.SendAsync(Encoding.UTF8.GetBytes(v1));
}) //.ConfigureLogging((hostCtx, loggingBuilder) =>
// {
// loggingBuilder.AddConsole();
// })
.ConfigureSuperSocket(options =>
{
options.Name = "Echo Server";
options.Listeners = new List<ListenOptions>() {
new ListenOptions
{
Ip = "Any",
Port = 40410
}
};
})
.Build(); await host.RunAsync();
}
}

SuperSocket 服务端 和 SuperSocket.ClientEngine 客户端及普通客户端的更多相关文章

  1. socket小程序写一个客户端,实现给服务端发送hello World字符串,将客户端发送的数据变成大写后返回

    写一个客户端,实现给服务端发送hello World字符串,将客户端发送的数据变成大写后返回 本机id是192.168.xx.xy 服务端 import socket soc = socket.soc ...

  2. 自己封装的Socket组件,实现服务端多进程共享Socket对象,协同处理客户端请求

    DotNet.Net.MySocket是SLB.NET(Server Load Balance服务器负载均衡)项目中的核心组件. 在实际的项目中发现,单进程的服务端处理高并发的客户请求能力有限. 所以 ...

  3. SpringCloud系列九:SpringCloudConfig 基础配置(SpringCloudConfig 的基本概念、配置 SpringCloudConfig 服务端、抓取配置文件信息、客户端使用 SpringCloudConfig 进行配置、单仓库目录匹配、应用仓库自动选择、仓库匹配模式)

    1.概念:SpringCloudConfig 基础配置 2.具体内容 通过名词就可以发现,SpringCloudConfig 核心作用一定就在于进行配置文件的管理上.也就是说为了更好的进行所有微服务的 ...

  4. C# SuperSocket服务端入门(一)

    1,新建一个控制台应用程序,.NET版本4.0 2,添加SuperSocket(1.6.1).Binaries\Net40\Debug  目录下的: SuperSocket的dll文件( log4ne ...

  5. TCP状态机:当服务端主动发FIN进TIME_WAIT,客户端源端口复用会发生什么

    0X01 正常情况下TCP连接会通过4次挥手进行拆链(也有通过RST拆除连接的可能,见为什么服务器突然回复RST--小心网络中的安全设备),下图TCP状态机展示了TCP连接的状态变化过程: 我们重点看 ...

  6. .Net TCP探索(一)——TCP服务端开发(同时监听多个客户端请求)

        最近在园子里看了大神写的(面试官,不要再问我三次握手和四次挥手),忍不住写段程序来测试一番.     在网上找了很多例子,大多只实现了TCP点对点通讯,但实际应用中,一个服务器端口往往要监听多 ...

  7. SuperSocket 服务管理器 (ServerManager)

    什么 SuperSocket 服务管理器? SuperSocket 服务管理器是一个让你能够在客户中用图形化界面来管理和监控你的SuperSocket服务器程序的组件. 在服务器端配置服务器管理器 事 ...

  8. TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端

    目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...

  9. 基于socket的客户端和服务端聊天简单使用 附Demo

    功能使用 服务端 分离一个不停接受客户端请求的线程 接受不客户端请求的线程中,再分离就收消息的线程 几大对象分别是 IPEndPoint IP终结点 服务端Socket,绑定终结点Bind,启动监听L ...

  10. Unity3D客户端和Java服务端使用Protobuf

    转自:http://blog.csdn.net/kakashi8841/article/details/17334493 前几天有位网友问我关于Unity3D里面使用Protobuf的方法,一时有事拖 ...

随机推荐

  1. Spring boot 配置文件位置

    Spring boot 的Application.properties 配置文件可以是以下几个地方:classpath:/,classpath:/config/,file:./,file:./conf ...

  2. .NET 9 增强 OpenAPI 规范

    在 .NET 9 的更新中,微软增强了原生 OpenAPI.这一变化表明 .NET 正在更加拥抱开放标准,同时让开发者体验更加轻松高效.本文将探讨为何进行这一更改.OpenAPI 的优势,以及如何在 ...

  3. error C2589: “(”:“::”右边的非法标记错误的处理

    问题:error C2589: "(":"::"右边的非法标记错误的处理 标准库在<algorithm>头中定义了两个模板函数std::min() ...

  4. [转]java调用python脚本以及通过Process.waitFor()直接调用python模块返回错误代码1的一种解决办法

    常见的java调用python脚本方式 通过jython提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 通过jython提供的类库实现 通过jython实现的话,我 ...

  5. [炼丹术]Yolov8训练使用总结

    Yolov8训练使用总结 Yolov8训练使用总结 介绍 安装 Install pip install ultralytics Development git clone https://github ...

  6. WSL设置中文、修改默认Root登陆、添加右键菜单

    1.设置中文 首先安装 aptitude 管理工具 #apt-get install aptitude 然后安装语言环境并进入语言环境设置. #aptitude install locales #dp ...

  7. Solution Set - “一二行诗句相遇,十万颗恒星解体”

    目录 0.「集训队互测 2018」Fim4 1.「ABC 294Ex」K-Coloring 2.「NOI Simu.」解码 3.「NOI Simu.」图 4.「NOI Simu.」表达式 5.「ULR ...

  8. CDS标准视图:功能位置信息 I_FunctionalLocationData

    视图名称:I_FunctionalLocationData 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'Functional Location Data' ...

  9. document.querySelector 有多个类 的情况

    document.querySelector 有多个类 document.querySelector 方法用于返回文档中匹配指定 CSS 选择器的第一个元素.如果要查询具有多个类的元素,可以将它们作为 ...

  10. Storm基本概念

    storm简介   场景 伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样.更加便捷,同时对于信息的时效性要求也越来越高.举个搜索场景中的例子,当一个卖家发布了一条宝 ...