如何为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
相关产品推荐
相关产品推荐

