TCP监听--监听指定IP的端口号

using HIBase.Library.Helper;

using System;

using System.Net;

using System.Net.Sockets;

using System.Threading;

public class TcpReceiver

{

private TcpListener _listener;

private bool _isRunning;

private const int PORT = 2001;//自行指定

// 启动监听(外部调用)

public void Start()

{

if (_isRunning) return;

_isRunning = true;

new Thread(ListenThread) { IsBackground = true }.Start();

}

// 监听线程

private void ListenThread()

{

try

{

_listener = new TcpListener(IPAddress.Any, PORT);//自行制定

_listener.Start();

while (_isRunning)

{

// 等待客户端连接

if (_listener.Pending())

{

TcpClient client = _listener.AcceptTcpClient();

// 每次来新连接,都开独立线程接收

new Thread(() => ReceiveClient(client))

{

IsBackground = true

}.Start();

}

Thread.Sleep(10);

}

}

catch

{

Thread.Sleep(1000);

if (_isRunning) ListenThread();

}

}

// 处理一个客户端连接(支持持续收发)

private void ReceiveClient(TcpClient client)

{

byte\[\] buffer = new byte1024 \* 8;

try

{

using (NetworkStream stream = client.GetStream())

{

while (_isRunning && client.Connected)

{

if (stream.DataAvailable)

{

int len = stream.Read(buffer, 0, buffer.Length);

if (len <= 0) break;

byte\[\] data = new bytelen;

Array.Copy(buffer, data, len);

// 持续处理数据

ProcessReceivedData(data);

}

Thread.Sleep(10);

}

}

}

catch

{

}

finally

{

try { client.Close(); } catch { }

}

}

private void ProcessReceivedData(byte\[\] data)

{

try

{

//业务处理逻辑

}

catch { }

}

// 停止

public void Stop()

{

_isRunning = false;

try { _listener.Stop(); } catch { }

}

}

相关推荐
用户128526116022 小时前
我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码
java
Linsk2 小时前
组件 = 模板 + 业务逻辑
java·前端·vue.js
星沉远浦3 小时前
用Gemini高效解决Java代码报错难以定位的问题
java
用户298698530146 小时前
Word 文档字符级格式化:Java 实现方案详解
java·后端
笨鸟飞不快7 小时前
从单个服务到集群:一次完整的性能排查复盘
java·前端
荣码7 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
SamDeepThinking7 小时前
Java微服务练习方式
java·后端·微服务
朦胧之17 小时前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅1 天前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
程序员晓琪1 天前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端