C# Socket 客户端与服务端通讯(二:服务端代码说明详细介绍)
接上一篇文章,有了客户端发送请求,那么接下来就是服务端监听请求废话不多说,代码如下:
服务端监听代码实例:
//定义侦听端口
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, Port);
//定义套接字类型,创建服务端 SocketServer
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//设置SOCKET允许多个SOCKET访问同一个本地IP地址和端口号
// socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
//连接
socket.Bind(ipEnd);
//开始侦听
socket.Listen(10);
//一旦接受连接,创建一个客户端
WaitCallback waitCallback = new WaitCallback(DealData);
while (true)
{
//服务端,监听客户端的连接
Socket client = socket.Accept();
//将方法排入队列以便执行,WaitCallback,表示要执行的方法。如果将方法成功排入队列,则为 true;否则为 false
ThreadPool.QueueUserWorkItem(waitCallback, client);
}
/// <summary>
/// 处理接收到的数据
/// </summary>
/// <param name="data"></param>
private void DealData(object state)
{
byte[] data = new byte[1024];
try
{
Socket client = (Socket)state;
if (client.Receive(data) > 0)
{
int port = (client.RemoteEndPoint as IPEndPoint).Port;
System.Net.IPAddress ipAdd = (client.RemoteEndPoint as IPEndPoint).Address;
data = JXDecrypt(data);
string afterDecode = System.Text.Encoding.UTF8.GetString(data);
if (!string.IsNullOrEmpty(afterDecode))
{
// 这里可以写处理逻辑
string[] splitRP = afterDecode.Split('\t');
if (splitRP != null && splitRP.Length > 4)
{
string cmd = splitRP[0];//推送类型
string randomNumber = splitRP[1].ToString();// 随机码转换的字符串
string lotteryCode = splitRP[2].ToString();// 玩法英文名称
string stage = splitRP[3].Split('\0')[0].ToString();// 期号
string funRsp = string.Empty;
RespMsg(client, randomNumber);
DateTime time2 = DateTime.Now;
TimeSpan ts = time1.Subtract(time2).Duration();
string dateDiff = ts.Minutes.ToString() + "分钟" + ts.Seconds.ToString() + "秒" + ts.Milliseconds.ToString() + "ss";
LogHelp.ServiceSocketStep.Info("处理完一笔数据索要的时间为:{" + dateDiff + "}");
}
else
{
LogHelp.ServiceSocket.Info("【Socket Server】 " + "获取数据长度有错误!");
}
}
else
{
LogHelp.ServiceSocketStep.Info("【Socket Server】 " + "没有获取到解密后的文件!");
}
LogHelp.ServiceSocketStep.Info("【Socket Server】 " + "------------------------------------------------------结束一次监听-----------------------------------------------------");
}
}
catch (Exception ex)
{
LogHelp.ServiceSocketStep.Error("处理新推送出错:" + ex.Message, ex);
}
}
团队五人,专业从事软件开发,接单工作,专注于Java,.Net,PHP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App