体验.net core 3.1 socket
1.netcore3.0 webapi集成Swagger 5.02.DingTalk钉钉消息推送(.net core 3 WebApi尝鲜记)3..net core 3.1 webapi后端接收钉钉小程序post的文件/图片4.asp.net core 3.1 webapi FileContentResult 5.一次asp.net core3.1打造webapi开发框架的实践6..net core3.1项目在centos7.6上部署经验7.ZR.Admin小改和VUE3版本体验8.我的微服务之路,看我搭建dapr趟过的坑9.42岁大龄程序员的迷茫,看我最新尝鲜.net 5+Dapper搭建的WebAPI框架10.Kestrel服务器ASP.NetCore 3.1程序启用SSL11.Asp.Net Core 下 Newtonsoft.Json 转换字符串 null 替换成string.Empty(转)12.ApiResult-WebAPI开发统一返回值对象的演化(.net core版)
13.体验.net core 3.1 socket
最近好像比较闲了,每天也没加班经常不到半天就把活干完。7点半到公司,5点下班。这样的日子,好像也没意思。
想起把以前windows平台下的socket server程序试试在.net core下改造一下跑在linux服务器上。
services.AddSingleton(MiddlewareContext.GetInstance());
using DingTalk_Middleware.dto; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace DingTalk_Middleware { public class MiddlewareContext { private static MiddlewareContext _ServiceContext = null; private readonly static object lockObj = new object(); public Dictionary<string, EmployeeDTO> UserCache = new Dictionary<string, EmployeeDTO>(); protected Dictionary<string, Socket> clientDict = new Dictionary<string, Socket>(); Action updateCacheTask; Socket serverSocket; Thread socketThread; private MiddlewareContext() { updateCacheTask = () => { while (true) { Console.WriteLine(DateTime.Now + ":->updateCacheTask is running!Cache Count:" + UserCache.Count + "。"); System.Threading.Thread.Sleep(10000); if (UserCache.Count > 1000) { UserCache.Clear(); Console.WriteLine(DateTime.Now + ":->Cache is cleared。"); } } }; Task.Factory.StartNew(updateCacheTask); serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); byte[] inValue = new byte[] { 1, 0, 0, 0, 0x88, 0x13, 0, 0, 0xd0, 0x07, 0, 0 }; serverSocket.IOControl(IOControlCode.KeepAliveValues, inValue, null); IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5990); serverSocket.Bind(ipEndPoint); serverSocket.Listen(1024); socketThread = new Thread(() => { if (serverSocket != null) { while (true) { try { Socket clientSocket = serverSocket.Accept(); if (clientSocket != null) { string ip = clientSocket.RemoteEndPoint.ToString(); Console.WriteLine(DateTime.Now + "->:" + ip); if (!clientDict.ContainsKey(ip)) { clientDict.Add(ip, clientSocket); } else { clientDict[ip] = clientSocket; } Thread receiveThread = new Thread(ReceiveMessage); receiveThread.Start(clientSocket); } } catch { } finally { Thread.Sleep(1); } } } }); socketThread.Start(); } private void ReceiveMessage(object clientSocket) { byte[] buffer = new byte[4096]; Socket myClientSocket = (Socket)clientSocket; while (myClientSocket != null) { try { if (myClientSocket != null && myClientSocket.Connected) { try { int receiveNumber = myClientSocket.Receive(buffer); if (receiveNumber > 0) { string msg = Encoding.UTF8.GetString(buffer).Trim(); Console.WriteLine(DateTime.Now + "Recevice Data:->" + msg); } } catch (Exception exx) { Console.WriteLine(Environment.NewLine + exx.Message); if (myClientSocket != null) myClientSocket.Close(); } } } catch (Exception ex) { Console.WriteLine(Environment.NewLine + ex.Message); } finally { Thread.Sleep(10); } } } public static MiddlewareContext GetInstance() { if (_ServiceContext == null) { lock (lockObj) { if (_ServiceContext == null) { _ServiceContext = new MiddlewareContext(); } } } return _ServiceContext; } } }
不是控制台程序。就用的asp.net core webapi。这样api 和 socket server在一起,比较符合原来的场景。
作者:数据酷软件
出处:https://www.cnblogs.com/datacool/p/12455846.html
关于作者:20年编程从业经验,持续关注MES/ERP/POS/WMS/工业自动化
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
联系方式: qq:71008973;wx:6857740733
基于人脸识别的考勤系统 地址: https://gitee.com/afeng124/viewface_attendance_ext
自己开发安卓应用框架 地址: https://gitee.com/afeng124/android-app-frame
WPOS(warehouse+pos) 后台演示地址: http://47.239.106.75:8080/
合集:
.net core随笔
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探