原因:
自己程序bind的是127.0.0.1
应该改成 bind 阿里云的私网地址
client连接的是阿里云公网地址
参考:
阿里云服务器,客户端socket无法连接的问题 - 爱码网
排查过程记录:
1,安全组设置:有正常设置
2,防火墙有没有允许端口:已经允许
root@iZwz9hty12mlm1wlg0jzn0Z:~# ufw allow 8080/tcp
Rule added
Rule added (v6)
root@iZwz9hty12mlm1wlg0jzn0Z:~# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
80/tcp ALLOW IN Anywhere
80 ALLOW IN Anywhere
22/tcp ALLOW IN Anywhere
443 ALLOW IN Anywhere
Anywhere ALLOW IN 192.168.1.192
8080 ALLOW IN Anywhere
8080/tcp ALLOW IN Anywhere
80/tcp (v6) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
22/tcp (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
8080 (v6) ALLOW IN Anywhere (v6)
8080/tcp (v6) ALLOW IN Anywhere (v6)
3,抓包: 三次握手就没握上
查看rst原因:
有以下情况会发送RST包
1.connect一个不存在的端口;
2.向一个已经关掉的连接send数据;
3.向一个已经崩溃的对端发送数据(连接之前已经被建立);
4.close(sockfd)时,直接丢弃接收缓冲区未读取的数据,并给对方发一个RST。这个是由SO_LINGER选项来控制的;
5.a重启,收到b的保活探针,a发rst,通知b。
TCP socket在任何状态下,只要收到RST包,即可进入CLOSED初始状态。
所以怀疑是不是端口没litsen:
netstat -anp | grep 8080
得到又不是
8080 0.0.0.0:* LISTEN
4,再次搜索socket连接不上原因 找到文章
阿里云服务器,客户端socket无法连接的问题 - 爱码网
改bind的ip试下,成功。