腾讯云与本地主机socket通信网络问题
最近在做毕业设计的时候遇到的问题,在本地使用ping和ssh登陆腾讯云服务器时候网络没有问题,但是自己编写的socket程序却无法与云服务器进行通信,尝试了各种方法后前来总结一下可能的问题:1.首先出现问题的第一想法是去检查自己的代码,当时前前后后查了好几遍,确定自己的代码没有问题。此处补充一点,在进行网络编程的时候一定要设置一些异常,不然很难定位问题。2.接上一条的思路,我的问题在connect
最近在做毕业设计的时候遇到的问题,在本地使用ping和ssh登陆腾讯云服务器时候网络没有问题,但是自己编写的socket程序却无法与云服务器进行通信,尝试了各种方法后前来总结一下可能的问题:
1.首先出现问题的第一想法是去检查自己的代码,当时前前后后查了好几遍,确定自己的代码没有问题。此处补充一点,在进行网络编程的时候一定要设置一些异常,不然很难定位问题。
2.接上一条的思路,我的问题在connect函数处,并且给出的错误码是10062(大概是这么个东西),但是其实没有很大作用,查了一通之后也没有解决。于是继续回来查网络,确认了自己的服务器端bind的端口和客户端的port和ip都没有问题。这时偶然想到去查看一下云服务器的IP(此前从未对此有过怀疑),一看果然发现了问题。腾讯云会提供一个公网的IP,而在终端使用ifconfig查到的是一个私网IP,根本没有那个公网IP。
3.顺着IP的思路,最后在结合多个博主的文章后解决了问题:
(1)服务器端的IP要绑定为查到的那个内网IP,而客户端要绑定为公共IP,对应的代码:
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(端口号);
inet_aton("内网IP",&addr.sin_addr);
(2)确保所使用的云服务器端口是开放且未被占用的,此处也有一个坑:当时我用的是8000端口,并且是知道要打开的,但是当时用腾讯云面板直接添加的规则,而我使用宝塔面板进行操作,宝塔端没有显示这个端口开放,一开始没有在意,后来发现这个也会影响,所以如果你也是用的宝塔面板一定确认端口号是否可用。
开启端口的方式:
宝塔面板的安全->放行端口->(输入端口号和备注)->放行。
更多推荐
所有评论(0)