有用户反馈使用我们的软件时会出现 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. [转帖]使用 TiDB 读取 TiFlash

    https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash 本文档介绍如何使用 TiDB 读取 TiFlash 副本. TiDB ...

  2. [转帖]生产环境 TiDB 集群混合部署实践

    https://tidb.net/book/tidb-monthly/2022/2022-04/usercase/tidb-cluster 一.背景​ 由于各种场外因素导致我们不能自由选择的理想硬件环 ...

  3. [转帖]Nginx 使用与异常处理

    http://jartto.wang/2017/04/15/nginx-exception-handling/ 以前总是偷懒使用 Http-Server 来启动一个本地服务,后来花时间学习了一下 Ng ...

  4. 【转帖】基于paramiko的二次封装

    https://www.jianshu.com/p/944674f44b24 paramiko 是 Python 中的一个用来连接远程主机的第三方工具,通过使用 paramiko 可以用来代替以 ss ...

  5. 【转帖】Linux性能优化(一)——stress压力测试工具

    https://blog.csdn.net/a642960662/category_11641226.html 一.stress简介 1.stress简介 stress是Linux的一个压力测试工具, ...

  6. Orika JavaBean映射工具使用

    作者:京东零售 张宾 1.Orika是什么? Orika是一个简单.快速的JavaBean拷贝框架,它能够递归地将数据从一个JavaBean复制到另一个JavaBean,这在多层应用开发中是非常有用的 ...

  7. LINUX安装和配置

    本篇文章为本人从零开始学习linux的学习心得,其中包含了 部署虚拟环境安装linux系统 .其中若有错误之处,请读者积极指出,让本人与读者共同进步. 第一章 部署虚拟环境安装linux系统及配置网路 ...

  8. TienChin 渠道管理-工程创建

    因为本文章主要围绕着项目开发进行,所以前言不做开头,直接上内容. 添加字段 我们的渠道表,我看到若依脚手架当中有一个是否删除的标志字段,所以我这里也添加一下: ALTER TABLE `tienchi ...

  9. 解决问题:latex中bib引用顺序不正确,引用顺序和正文不一致

    问题:生成pdf时文献应用会乱序 引用bib格式的参考文献时,会这么写: \bibliographystyle{plain} \bibliography{%filename%.bib} 而plain的 ...

  10. MySQL常用操作指令大全

    前言: 一.基础概念 二.子句顺序 三.使用MySQL(USE.SHOW) 四.检索数据(SELECT) 五.排序检索数据(ORDER BY) 六.过滤数据(WHERE) 七.数据过滤(AND.OR. ...