使用python 中的socket包实现本地电脑与阿里云ECS服务器的通信

这里有三个坑点
1、服务器使用bind((HOST,PORT))命令时,HOST是该主机的私有IP(可以通过ifconfig查看,也可以打开阿里云网页上面的控制台查看),而客户端,也就是我们的电脑上面运行connect((HOST,PORT))时,HOST是我们要连接的服务器的公网IP(可以打开阿里云网页上面的控制台查看)
2、在阿里云的安全组设置里面要开启你相连接/开放的端口
3、在服务器内部(可以用xshell连接,也可以直接在阿里云网站上打开云命令行)也要开放端口:

输入命令,打开iptables的配置文件

vi /etc/sysconfig/iptables

然后添加一行,添加好后按ESC,输入:x保存退出。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

然后要重启iptables,输入命令

service iptables restart

重启成功后就可以在客户端与服务器之间进行通信了。

服务器端示例代码

import socket

name = socket.gethostname()
HOST = socket.gethostbyname(name)
PORT = 42366

s = socket.socket()
s.bind((HOST,PORT))
s.listen(5)
print("listening")
conn,addr = s.accept()
print("connected by ",addr)
while True:
    data = conn.recv(1024)
    if not data:
        break
    conn.sendall(data)

conn.close()

客户端示例代码

import socket

HOST = '公网IP'  
PORT = 42366

s = socket.socket()
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章