websocket 监听端口问题
有用户反馈使用我们的软件时会出现 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 监听端口问题的更多相关文章
- 修改Oracle监听端口
修改oracle监听端口 修改端口号的整体步骤:1.1 查看当前监听的状态1.2 停止监听1.3 修改监听文件的端口号1.4 修改初始化参数local_listener1.5 重启 ...
- Windows下修改Oracle监听端口
先放开防火墙的端口,再来改监听端口. 只有一个实例: net stop OracleOraDb11g_home1TNSListener 再运行 NET Manager 修改实例名与Listener的端 ...
- Nginx 中 fastcgi_pass 监听端口 unix socket和tcp socket差
Nginx 中 fastcgi_pass 监听端口 unix socket和tcp socket差别 Nginx连接fastcgi的方式有2种:unix domain socket和TCP,Uni ...
- Oracle RAC 11gR2 修改本地及SCAN监听端口
昨天同事说有套RAC集群客户要求修改数据库的监听端口,在处理的过程中,发现网上的相关资料都不是很全面,所以整理了一下,希望给其他有需要的朋友提供一点有利的参考资料.具体操作过程如下: ...
- Apache配置多个监听端口和不同的网站目录的简单方法(转)
转自http://www.waaqi.com/archives/707.html 由于开发的多项目,每个项目又要独立,要用根目录地址. 所以这时候我们需要配置多个不同目录的Apache,如果是外部网可 ...
- nginx监听端口和反向代理端口的权限问题
Linux的SELinux安全性控制除作用于文件系统外还作用于端口,这使得那些作为服务启动的进程只能在规定的几个端口上监听.为叙述方便我们称之为受控端口. nginx监听端口 要查看当前有哪些受控端口 ...
- .net core Kestrel宿主服务器自定义监听端口配置
在.net core的web程序中,除了可以在项目中硬编码服务器的监听端口外,还可以在外部通过json文件配置. 方法如下: 第一步:在项目中新建一个名为Hosting.json的文件.当然,文件名可 ...
- 黄聪:windows下使用xampp3.2.2配置多个监听端口和不同的网站目录
windows下使用xampp3.2.2配置多个监听端口和不同的网站目录 一:配置Apache文件httpd.conf 打开Apache的配置文件httpd.conf,可以通过点击xampp的Apac ...
- Apache无法正常启动(配置多个监听端口)
Apache监测多个端口配置: 1.conf->extra->httpd-vhosts.conf 检查配置项是否写错 2.http.conf listen端口是否监听正确 3.环境变量中 ...
- 【PHP】xampp配置多个监听端口和不同的网站目录(转)
转自:https://blog.csdn.net/cc1314_/article/details/75646344 windows下使用xampp配置多个监听端口和不同的网站目录 一:配置Apache ...
随机推荐
- [转帖]使用 TiDB 读取 TiFlash
https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash 本文档介绍如何使用 TiDB 读取 TiFlash 副本. TiDB ...
- [转帖]生产环境 TiDB 集群混合部署实践
https://tidb.net/book/tidb-monthly/2022/2022-04/usercase/tidb-cluster 一.背景 由于各种场外因素导致我们不能自由选择的理想硬件环 ...
- [转帖]Nginx 使用与异常处理
http://jartto.wang/2017/04/15/nginx-exception-handling/ 以前总是偷懒使用 Http-Server 来启动一个本地服务,后来花时间学习了一下 Ng ...
- 【转帖】基于paramiko的二次封装
https://www.jianshu.com/p/944674f44b24 paramiko 是 Python 中的一个用来连接远程主机的第三方工具,通过使用 paramiko 可以用来代替以 ss ...
- 【转帖】Linux性能优化(一)——stress压力测试工具
https://blog.csdn.net/a642960662/category_11641226.html 一.stress简介 1.stress简介 stress是Linux的一个压力测试工具, ...
- Orika JavaBean映射工具使用
作者:京东零售 张宾 1.Orika是什么? Orika是一个简单.快速的JavaBean拷贝框架,它能够递归地将数据从一个JavaBean复制到另一个JavaBean,这在多层应用开发中是非常有用的 ...
- LINUX安装和配置
本篇文章为本人从零开始学习linux的学习心得,其中包含了 部署虚拟环境安装linux系统 .其中若有错误之处,请读者积极指出,让本人与读者共同进步. 第一章 部署虚拟环境安装linux系统及配置网路 ...
- TienChin 渠道管理-工程创建
因为本文章主要围绕着项目开发进行,所以前言不做开头,直接上内容. 添加字段 我们的渠道表,我看到若依脚手架当中有一个是否删除的标志字段,所以我这里也添加一下: ALTER TABLE `tienchi ...
- 解决问题:latex中bib引用顺序不正确,引用顺序和正文不一致
问题:生成pdf时文献应用会乱序 引用bib格式的参考文献时,会这么写: \bibliographystyle{plain} \bibliography{%filename%.bib} 而plain的 ...
- MySQL常用操作指令大全
前言: 一.基础概念 二.子句顺序 三.使用MySQL(USE.SHOW) 四.检索数据(SELECT) 五.排序检索数据(ORDER BY) 六.过滤数据(WHERE) 七.数据过滤(AND.OR. ...