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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:56:06