You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为C# TcpClient指定固定本地端口(如15201)?

指定C# TcpClient本地端口的实现方法

默认使用TcpClient(string host, int port)构造函数时,系统会自动分配随机本地端口。要指定固定本地端口(如15201),需要先绑定本地IP和端口,再发起连接,具体修改如下:

修改后的完整代码

// 创建未连接的TcpClient实例
TcpClient client = new TcpClient();
// 指定本地端点(IP为192.168.0.82,端口为15201)
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("192.168.0.82"), 15201);
// 绑定本地端口
client.Client.Bind(localEndPoint);
// 连接目标服务器
client.Connect("192.168.0.250", 2021);

NetworkStream nwStream = client.GetStream();
string textToSend = "READ#TEST#EXECUTOR";
byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(textToSend);
nwStream.Write(bytesToSend, 0, bytesToSend.Length);

// 优化接收逻辑:通过实际读取字节数避免空字符干扰
byte[] receiveBuffer = new byte[client.ReceiveBufferSize];
int bytesRead = nwStream.Read(receiveBuffer, 0, receiveBuffer.Length);
if (bytesRead > 0)
{
    string msg = Encoding.ASCII.GetString(receiveBuffer, 0, bytesRead);
    Debug.WriteLine($"{msg}");
}

// 释放资源
client.Close();

关键说明

  • 必须先调用Client.Bind()绑定本地端点,再调用Connect()连接服务器,顺序不能颠倒。
  • 确保本地端口15201未被其他程序占用,否则会抛出SocketException,建议添加异常捕获逻辑。
  • 原代码直接使用ReceiveBufferSize读取的方式可能包含无效空字符,通过bytesRead获取实际读取长度能提升字符串解析的准确性。

内容的提问来源于stack exchange,提问作者NewCode82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:36:25