阿里云常见问题及解决方案:

一. 网络链接问题

【写在前面】
阿里云跟其他的腾讯云相比有点坑爹呀。。。
今天测试时,按照之前腾讯云的骚操作只需要将对应4G路由器的设置绑定到对应的云服务器公网IP地址就行,
test code:
说明:
腾讯云公网ip:106.54.40.84:8000
腾讯云本地ip:172.17.0.14:8001
阿里云公网ip:47.110.232.228:8000
阿里云本地ip:172.16.119.1528001


import socket
import time
# _*_ coding:utf-8 _*_

'''
endstr = "end"  # 重新定义结束符
str = ""    
for line in iter(input, endstr):  # 每行接收的东西
    str += line+"\n"  # 换行
print(str)
'''

server = socket.socket()
server.bind(('106.54.40.84', 8000))     # (host, port)  公网IP直接一键搞定  实际做了8000到本地IP的8001端口映射
server.listen(4)  # 服务器端建立侦听,监听客户端的连接请求
serObj, address = server.accept()
while True:

    receive_data = serObj.recv(1024).decode('gb18030')
    # print('receive_data is >>', receive_data)
    # receive = receive_data + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    print('receive is >>', receive_data)

    if receive_data == 'quit':
        break

    '''
    if receive_data == 'qui':
        send_data = input('server>>')  # python3中的input默认为 string
        # send_data = 'test\r\n'
        send_data1 = send_data + '\r\n'
        print('server>> send_data1 is >>', send_data1)
        serObj.send(send_data1.encode('utf-8'))

    '''
    send_data = input('server>>')  # python3中的input默认为 string
    # send_data = 'test\r\n'
    send_data1 = send_data + '\r\n'
    print('server>> send_data1 is >>', send_data1)
    serObj.send(send_data1.encode('utf-8'))
serObj.close()
server.close()

可是人家阿里云就是不一般

import socket

# _*_ coding:utf-8 _*_


'''
endstr = "end"  # 重新定义结束符
str = ""    
for line in iter(input, endstr):  # 每行接收的东西
    str += line+"\n"  # 换行
print(str)
'''

server = socket.socket()
server.bind(('47.110.232.228', 8000))     # (host, port)
server.listen(4)  # 服务器端建立侦听,监听客户端的连接请求
serObj, address = server.accept()
while True:

    receive_data = serObj.recv(1024).decode('gb18030')
    # print('receive_data is >>', receive_data)
    # receive = receive_data + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    print('receive is >>', receive_data)

    if receive_data == 'quit':
        break

    '''
    if receive_data == 'qui':
        send_data = input('server>>')  # python3中的input默认为 string
        # send_data = 'test\r\n'
        send_data1 = send_data + '\r\n'
        print('server>> send_data1 is >>', send_data1)
        serObj.send(send_data1.encode('utf-8'))

    '''
    send_data = input('server>>')  # python3中的input默认为 string
    # send_data = 'test\r\n'
    send_data1 = send_data + '\r\n'
    print('server>> send_data1 is >>', send_data1)
    serObj.send(send_data1.encode('utf-8'))


serObj.close()
server.close()

阿里云直接报错:
winerror 10049

解决方法

1:IP地址查看:

  • 本地主机地址:
 ipconfig指令
  • 公网IP地址:
 curl httpbin.org/ip

各方查证,结论如下:
阿里云 有两种网络
①经典网络
②专有网络
经典网络可以直接绑定公网IP,
专有网络不能直接绑定公网IP
(客服是这么讲的 “这不是经典网络。没有网卡所有TCP协议无法使用”)
socket服务端要写阿里云私有地址,客户端要写公有地址
socket服务端要写阿里云私有地址,客户端要写公有地址
socket服务端要写阿里云私有地址,客户端要写公有地址

测试有效,完美解决
参考 https://blog.csdn.net/u014043213/article/details/80228495#commentBox(看完之后觉得没啥用)

完美解决方案:

http://www.usr.cn/Faq/405.html

解决方法:

  • 通过阿里云的服务器官网添加安全组规则:
  • 在这里插入图片描述
    在这里插入图片描述
    实际测试:
    在这里插入图片描述
    测试代码如下:

将公网IP换成本地私有IP 问题得到完美解决
将公网IP换成本地私有IP 问题得到完美解决
将公网IP换成本地私有IP 问题得到完美解决

import socket
# _*_ coding:utf-8 _*_
server = socket.socket()
server.bind(('47.110.232.228', 8000))     # (host, port)
server.listen(4)  # 服务器端建立侦听,监听客户端的连接请求
serObj, address = server.accept()
while True:

    receive_data = serObj.recv(1024).decode('gb18030')

    print('receive is >>', receive_data)

    if receive_data == 'quit':
        break
    send_data = input('server>>')  # python3中的input默认为 string
    # send_data = 'test\r\n'
    send_data1 = send_data + '\r\n'
    print('server>> send_data1 is >>', send_data1)
    serObj.send(send_data1.encode('utf-8'))

serObj.close()
server.close()

测试结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44322778/article/details/106173946