概要
主要针对工业控制自动化场景的应用,比如一些扫码枪、读码器、视觉软件等任何可以用TCP/IP协议通信的设备或者软件,主要使用TcpListener 类来进行操作,底层是基于Socket协议来写的,不过并不用关心底层,拿来用就好
代码部分
提示:是在winform的环境下使用的这段代码,其他暂时没有测试
using System.Net.Sockets
void StartListening(int port)//port是要进行监听的端口
{
try
{
// 创建 TcpListener 实例
//可以指定要监听的IP地址,这里是所有往这个端口发消息的IP
TcpListener listener = new TcpListener(IPAddress.Any, port);
listener.Start();//开始监听
while (true)//始终在监听
{
// 等待客户端连接
TcpClient client = listener.AcceptTcpClient();
//AcceptTcpClient 方法会阻塞,直到有客户端连接。
// 处理客户端连接
//可以用线程池来处理链接
//threadPool.QueueUserWorkItem(HandleClient, client);
HandleClient(client);
}
}
catch (Exception ex)
{
//捕获异常
}
}
void HandleClient(TcpClient state)
{
TcpClient client = state;
try
{
// 获取网络流,通过 NetworkStream 对象与客户端进行数据读写
NetworkStream stream = client.GetStream();
// 读取数据
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string data = Encoding.Default.GetString(buffer, 0, bytesRead);//注意这里的编码格式,从客户端读取数据并解码为字符串。
///
在这里写收到数据后处理的代码
//
//发送响应数据,一般不需要写除非有需求
string response = "服务器已收到: " + data;
byte[] responseData = Encoding.UTF8.GetBytes(response);
stream.Write(responseData, 0, responseData.Length);
}
catch (Exception ex)
{
//捕获异常
}
finally
{
// 关闭连接
client.Close();
}
}
TcpListener 的核心属性
属性名 | 说明 |
---|---|
LocalEndpoint | 获取 TcpListener 绑定的本地终结点(IP 地址和端口)。 |
Server | 获取底层的 Socket 对象。 |
ExclusiveAddressUse | 设置是否允许独占绑定到指定地址和端口。 |
TcpListener 的核心方法
方法名 | 说明 |
---|---|
Start() | 开始监听客户端连接。 |
Stop() | 停止监听客户端连接。 |
AcceptTcpClient() | 同步接受客户端连接,返回 TcpClient 对象。 |
AcceptTcpClientAsync() | 异步接受客户端连接,返回 Task,适合异步编程。 |
Pending() | 检查是否有挂起的连接请求。 |
总结
TcpListener适合场景:
简单的 TCP 服务器开发。
需要快速实现 TCP 监听和客户端连接处理的场景。
适合不需要复杂底层控制的场景。
功能相对简单,适合小型项目,如果需要更底层的控制(如自定义协议或高性能需求),建议直接使用 Socket 类。