使用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))

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