基于python的socket库,如何实现与云服务器的连接

我在云服务器上运行了服务端
并尝试在本地运行客户端去连接服务端
可无法连接
以下为详细代码(PS:我开启了对应的防火墙)

#服务器端
import socket
import threading

con = threading.Condition()

host = input('input the servers ip address:')#我填的是内网IP
port = 2000

s = socket.socket()
print('Socket created')
s.bind((host, port))
s.listen(5)
print('Socket is listening')
data=b''


def NotifAll(sss):
    global data
    if con.acquire():#获取锁
        data = sss
        con.notifyAll()#放弃当前资源 通知其他线程从wait执行
        con.release()#释放


def threadOut(con):#send
    global data
    while True:
        if con.acquire():
            con.wait()#放弃占用 等通知,若无,堵塞
            if data:
                try:
                    conn.send(data.encode())
                    con.release()
                except:
                    con.release()
                    return
def threadIn(conn,nick):
    while True:
        try:
            temp = conn.recv(1024)
            if not temp:
                conn.close()
                return
            NotifAll(temp)
            print(data.decode())
        except:
            NotifAll(nick.decode()+'error')
            print(data.decode())
            return

while True:
    conn, addr = s.accept()
    print(str(addr[0]) + ',' + str(addr[1]) + 'is connect')
    nick = conn.recv(1024)
    NotifAll('Welcom'+nick.decode()+'to the room')
    print(data)
    conn.send(data.encode())
    threading.Thread(target=threadOut, args=(con,)).start()
    threading.Thread(target=threadIn, args=(conn, nick)).start()




#客户端

import socket
import threading


port = 2000
ip = '填的内网ip'
arr = (ip, port)
outStr=''
inStr=''


def client_send(sock):
    global outStr
    while True:
        outStr = input('words')
        sock.send(outStr.encode())

def client_accept(sock):
    global inStr
    while True:
        try:
            inStr = sock.recv(1024)
            if not inStr:
                break
            if outStr != inStr:
                print(inStr.decode())
        except:
            break
nick=input('words')
sock = socket.socket()
sock.connect((ip, port))
sock.send(nick.encode())

th_send = threading.Thread(target=client_send,args=(sock,))
th_send.start()
th_accept = threading.Thread(target=client_accept,args=(sock,))
th_accept.start()

你先在局域网里测试成功了,再搬到云服务器上去。
除了在广域网上会产生分包粘包,你需要修改接收函数之外,能不能连上跟在哪关系不大。
而且云服务器上有好几重防火墙,你都要一一打开才行
系统本身有防火墙,然后IE界面上也有防火墙设置