這裏有三個坑點:
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))