最近在做毕业设计的时候遇到的问题,在本地使用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端口,并且是知道要打开的,但是当时用腾讯云面板直接添加的规则,而我使用宝塔面板进行操作,宝塔端没有显示这个端口开放,一开始没有在意,后来发现这个也会影响,所以如果你也是用的宝塔面板一定确认端口号是否可用。

开启端口的方式:

 宝塔面板的安全->放行端口->(输入端口号和备注)->放行。

更多推荐