C# TCP/IP应用程序执行时遇Format Exception的原因及修复建议
修复C# TCP/IP服务器启动时的System.FormatException问题
这种字符串格式错误在服务端启动时太常见了,基本都是从UI控件或配置读取的字符串,直接转换成数值类型时没做合法性校验导致的。结合你描述的场景,我给你几个最可能的修复方向:
1. 优先检查端口号的解析逻辑
几乎所有这类问题都是端口号输入出问题——比如你直接把TextBox里的文本转成int,但用户可能输入了空值、字母、或者超出范围的数字。
错误示例(大概率是你现在的写法):
// 直接转换,一旦输入非法就抛FormatException int port = Convert.ToInt32(txtServerPort.Text); TcpListener listener = new TcpListener(IPAddress.Any, port); listener.Start();
修复方案:用int.TryParse做校验
// 先校验输入是否为有效整数 if (!int.TryParse(txtServerPort.Text, out int port)) { MessageBox.Show("请输入有效的数字端口号!"); return; // 终止启动流程 } // 额外校验端口范围(TCP端口合法范围是1-65535) if (port < 1 || port > 65535) { MessageBox.Show("端口号必须在1-65535之间!"); return; } // 确认合法后再启动服务 TcpListener listener = new TcpListener(IPAddress.Any, port); listener.Start();
2. 检查其他需要转数值的配置项
如果你的Start按钮逻辑里还有其他从UI读取的数值(比如缓冲区大小、超时时间),也要用同样的方式处理:
// 比如读取缓冲区大小 if (!int.TryParse(txtBufferSize.Text, out int bufferSize) || bufferSize <= 0) { MessageBox.Show("请输入有效的缓冲区大小(正整数)"); return; }
3. 用调试工具精准定位出错行
如果上面的方案没解决问题,你可以在Visual Studio里开启异常捕获:
- 点击菜单栏的
调试→窗口→异常设置 - 勾选
Common Language Runtime Exceptions下的System.FormatException - 再次点击Start按钮,程序会在出错的那一行代码暂停,你就能直接看到是哪个字符串转换出了问题
核心原则
永远不要假设用户(或者自己测试时)会输入合法的数值,所有从外部(UI、配置、网络)读取的字符串,在转换为数值类型前必须做合法性校验,TryParse系列方法是处理这类场景的最佳实践。
内容的提问来源于stack exchange,提问作者Dev Bhatnagar
相关产品推荐
相关产品推荐

