这里有三个坑点:
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))