有用户反馈使用我们的软件时会出现 ERR_CONNECTION_CLOSED 问题

我们根据反馈排查问题发现是软件的 websocket 监听端口被另一款软件占用了,暂时的解决方法是将占用的软件关闭

可以通过命令行窗口输入

netstat -ano|findstr "9002" 

其中,9002 是端口号,返回的结果为占用端口的进程信息,包括 PID

再输入

 tasklist|findstr "21276"

21276 为进程的 PID,返回的结果为 exe 名称,根据 exe 可以找到软件名,后面可以根据实际情况处理


在实际的排查过程中,我们发现,理论上不同的 server 是不可以监听同一个端口号,除非 IP 不同,或者一个监听的 IPv4,一个监听的是 IPv6

根据猜测我们实际测试之后发现,我们的软件是监听的 IPv6

 void listen(uint16_t port, lib::error_code & ec) {
listen(lib::asio::ip::tcp::v6(), port, ec);
}

默认绑定的是 0.0.0.0:9002

这就导致在其他软件在 IPv4 监听 9002 端口,而我们的软件在 IPv6 监听 9002 端口,两者并不冲突,所以不会报错

简单的解决办法:指定 ipv4

server.listen(boost::asio::ip::tcp::v4(), 9002); 

这种情况下,当另一个进程想要监听该端口时都会返回错误


拓展:

IPV4 中,0.0.0.0 地址被用于表示一个无效的,未知的或者不可用的目标。

  • 在服务器中,0.0.0.0 指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是 0.0.0.0,那么通过两个 ip 地址都能够访问该服务。
  • 在路由中,0.0.0.0 表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。

在使用 websocket 时,如果不想使用默认的 0.0.0.0,而是想绑定指定的 ip,比如环回地址 127.0.0.1,可以这样传递参数

// Listen on port 9002
const boost::asio::ip::tcp::endpoint localEndpoint(
boost::asio::ip::address::from_string("127.0.0.1"), 9002);
server.listen(localEndpoint);

socket 上绑定也是类似的,

//服务端需要绑定ip和端口
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(WS_PORT);
sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); // inet_addr 已弃用

inet_addr 已弃用,可以使用 inet_pton() or InetPton()

通过 cmd 查看,ip 已变成绑定后的

websocket 监听端口问题的更多相关文章

  1. 修改Oracle监听端口

    修改oracle监听端口 修改端口号的整体步骤:1.1   查看当前监听的状态1.2   停止监听1.3   修改监听文件的端口号1.4   修改初始化参数local_listener1.5   重启 ...

  2. Windows下修改Oracle监听端口

    先放开防火墙的端口,再来改监听端口. 只有一个实例: net stop OracleOraDb11g_home1TNSListener 再运行 NET Manager 修改实例名与Listener的端 ...

  3. Nginx 中 fastcgi_pass 监听端口 unix socket和tcp socket差

    Nginx 中 fastcgi_pass 监听端口 unix socket和tcp socket差别   Nginx连接fastcgi的方式有2种:unix domain socket和TCP,Uni ...

  4. Oracle RAC 11gR2 修改本地及SCAN监听端口

        昨天同事说有套RAC集群客户要求修改数据库的监听端口,在处理的过程中,发现网上的相关资料都不是很全面,所以整理了一下,希望给其他有需要的朋友提供一点有利的参考资料.具体操作过程如下:     ...

  5. Apache配置多个监听端口和不同的网站目录的简单方法(转)

    转自http://www.waaqi.com/archives/707.html 由于开发的多项目,每个项目又要独立,要用根目录地址. 所以这时候我们需要配置多个不同目录的Apache,如果是外部网可 ...

  6. nginx监听端口和反向代理端口的权限问题

    Linux的SELinux安全性控制除作用于文件系统外还作用于端口,这使得那些作为服务启动的进程只能在规定的几个端口上监听.为叙述方便我们称之为受控端口. nginx监听端口 要查看当前有哪些受控端口 ...

  7. .net core Kestrel宿主服务器自定义监听端口配置

    在.net core的web程序中,除了可以在项目中硬编码服务器的监听端口外,还可以在外部通过json文件配置. 方法如下: 第一步:在项目中新建一个名为Hosting.json的文件.当然,文件名可 ...

  8. 黄聪:windows下使用xampp3.2.2配置多个监听端口和不同的网站目录

    windows下使用xampp3.2.2配置多个监听端口和不同的网站目录 一:配置Apache文件httpd.conf 打开Apache的配置文件httpd.conf,可以通过点击xampp的Apac ...

  9. Apache无法正常启动(配置多个监听端口)

    Apache监测多个端口配置: 1.conf->extra->httpd-vhosts.conf  检查配置项是否写错 2.http.conf listen端口是否监听正确 3.环境变量中 ...

  10. 【PHP】xampp配置多个监听端口和不同的网站目录(转)

    转自:https://blog.csdn.net/cc1314_/article/details/75646344 windows下使用xampp配置多个监听端口和不同的网站目录 一:配置Apache ...

随机推荐

  1. [转帖]记录一则enq: TX - row lock contention的分析过程

    https://www.cnblogs.com/jyzhao/p/8628184.html 故障描述:与客户沟通,初步确认故障范围大概是在上午的8:30-10:30之间,反应故障现象是Tomcat的连 ...

  2. [转帖]wiki Rust

    Rust[编辑] 维基百科,自由的百科全书       跳到导航跳到搜索   此条目介绍的是由Mozilla主导开发的编程语言.关于"rust"在英文中的本意,请见"铁锈 ...

  3. [转帖]Redash -- Redash部署安装docker版

    向导 官网 1.环境准备 1.1 安装docker和docker-compose 1.2 安装nodejs和npm 2.安装Redash 官网 主页 Developer Guide github 讨论 ...

  4. 使用JSON.stringify()去实现深拷贝,要小心哦,可能有巨坑

    对象中有时间类型的时候(时间类型会被变成字符串类型数据) const obj = { date: new Date() } console.log(typeof obj.date === 'objec ...

  5. 【k哥爬虫普法】Python程序员爬取视频资源13万部,一分钱没挣,获刑2年!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  6. IdentityServer4 系列文章01---密码授权模式

    IdentityServer4实现.Net Core API接口权限认证(快速入门)   什么是IdentityServer4 官方解释:IdentityServer4是基于ASP.NET Core实 ...

  7. gRPC基本教程

    原文在这里. 本教程为Go程序员提供了使用gRPC的基本介绍. 通过跟随本示例,你将学会如何: 在.proto文件中定义一个服务. 使用协议缓冲编译器生成服务器和客户端代码. 使用Go gRPC AP ...

  8. openAI发布v0.2.0了

    时隔20天,OpenAI从v0.0.1升级到了v0.2.0.与v0.0.1版相比,v0.2.0版主要做了以下改动: 把cmd目录下微信公众号的相关服务迁移到了这里 完善了cmd下的测试服务,针对ope ...

  9. .NET 使用Camunda快速入门

    简介参考:https://www.cnblogs.com/lvdeyinBlog/p/16095603.html 一.工作流介绍 1. 什么是工作流 工作流(Workflow),是对工作流程及其各操作 ...

  10. 使用Lua做为MMOARPG游戏逻辑开发脚本的一点体会

    项目背景 目前在一个大型MMOARPG游戏中使用Lua做为逻辑开发语言,Lua占整体代码量的80%. 我们这个MMO游戏开发近2年,客户端8人,项目组总体人数在100人(美术占70%),目前代码量很大 ...