C#控制台搭建Web服务器遇权限错误及端口检测咨询
C# 简易Web服务器问题解决方案
问题1:Socket权限错误与可用端口检测
针对System.Net.Sockets.SocketException: 'An attempt was made to access a socket in a way forbidden by its access permissions'错误,可通过以下方式检测并使用可用端口:
- 命令行检查端口占用:执行
netstat -ano | findstr ":端口号"(例如netstat -ano | findstr ":1043"),若返回结果则说明端口被其他进程占用,需更换端口。 - 让系统自动分配可用端口:无需硬编码端口,将TcpListener的端口参数设为0,系统会自动分配未被占用的端口,示例代码:
var ipAddress = IPAddress.Parse("127.0.0.1"); var serverListener = new TcpListener(ipAddress, 0); // 0表示自动分配端口 serverListener.Start(); var port = ((IPEndPoint)serverListener.LocalEndpoint).Port; Console.WriteLine($"Server started on port {port}.");
- 以管理员身份运行应用:部分端口(如1-1024)需要管理员权限才能绑定,右键控制台应用的可执行文件,选择“以管理员身份运行”。
问题2:ArgumentOutOfRangeException 错误翻译与修复
错误信息翻译
未处理的异常: System.ArgumentOutOfRangeException: 索引和长度必须引用字符串内的位置。
参数名: length
错误原因及修复
原代码的HTTP响应格式不符合HTTP协议规范,导致字符串处理时抛出异常:
- HTTP响应头与正文之间必须用空行分隔
Content-Type字段格式错误,分号后不应换行,正确格式为text/plain; charset=UTF-8Content-Length字段后缺少空格,正确格式为Content-Length: {contentLength}
修复后的响应字符串代码:
var response = $@"HTTP/1.1 200 OK Content-Type: text/plain; charset=UTF-8 Content-Length: {contentLength} {content}";
注意Content-Length行末尾添加一个空行,再拼接正文内容,确保HTTP响应格式正确。
内容的提问来源于stack exchange,提问作者Marky
相关产品推荐
相关产品推荐

