Windows socket error: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。(10048), on API 'bind'

本文介绍了在架设单机游戏时遇到的引擎或登陆器端口冲突问题及解决办法。通常情况下,此类问题由引擎或登陆器所需端口被占用导致,可通过关闭重复进程或重启计算机来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有些人在架设传世单机的时候,会遇到引擎或者登陆器报错:

Windows socket error: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

如下图所示:(登陆器的没截图)




原因:

引擎或者登陆器所需要的端口被占。

情况1: 一般为重复开启同个引擎会报此错。

情况2: 不排除为坑爹的软件占用单机引擎端口。


解决方法:

对于情况1,关闭所有引擎,删除所有登陆器进程,再次开启即可。或者直接重启可消除。

对于情况2,你需要查找出占用你的端口的软件。简单方法为退出所有无关的软件,基本可以消除影响。我遇到过的坑爹软件:风行播放器,它的升级程序进程占用登陆器端口。


PS:

神马,仍然不能解决你的问题?请评论,我会及时查看。

==>传世单机架设错误汇总






在C#中,如果你遇到因为套接字地址已经被占用而无法再次使用的错误,通常是由于尝试绑定到同一个IP地址端口上。这种情况下,你可以通过以下几个步骤来解决: 1. **检查并释放资源**:首先确保之前的套接字已经关闭并且从内存中正确地释放了。如果套接字没有关闭或者未正确清理,可能会导致地址不可用。 ```csharp if (socket != null) { socket.Close(); socket.Dispose(); // 或者使用using语句自动管理 } ``` 2. **使用异步绑定**:有时,如果你需要频繁地创建新的套接字,可以考虑使用`Task`或`async` / `await`语法进行异步操作,避免阻塞主线程。 ```csharp public async Task BindIfAvailable(int port) { await Task.Run(() => Socket.BindAsync(new IPEndPoint(IPAddress.Any, port))); } ``` 3. **动态选择端口**:如果必须绑定到特定IP,但端口不确定,可以随机选取一个未使用端口。 ```csharp int availablePort = GetNextFreeTcpPort(ipAddress); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Bind(new IPEndPoint(ipAddress, availablePort)); ``` 4. **异常处理**:对`Bind`方法抛出的`SocketException`进行捕获,并记录错误信息,判断是否为“地址已占”的错误再采取相应措施。 ```csharp try { socket.Bind(...); } catch (SocketException ex) when (ex.SocketErrorCode == SocketError.AddressAlreadyInUse) { Console.WriteLine("Address already in use, trying another port..."); // 重复上述步骤直到找到可用的端口 } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值