python实现两台不同主机(或虚拟机)之间进行通信(客户端和服务端)——Socket
准备
首先,打开命令行,输入ipconfig ,检查设备的IP地址和子网掩码,确保两台设备的IP地址在同一网段下(即IP地址 和子网掩码 与运算的结果相同)。
例: 设备A
IPv4地址:192.168.1.2 子网掩码:255.255.255.0
设备B
IPv4地址:192.168.1.3 子网掩码:255.255.255.0
设备C
IPv4地址:192.168.2.4 子网掩码:255.255.255.0
结论:设备A和B在同一网段,设备C在另一网段。 IP地址和子网掩码修改方法: 控制面板\网络和 Internet\网络连接 -> 找到使用的适配器 -> 右键属性 -> Internet 协议版本4 -> 属性 -> 使用下面的IP地址 -> 输入想用的IP地址和子网掩码(其他项可空)-> 确定。
如果使用虚拟机进行连接
将设备的防火墙关闭(控制面板\系统和安全\Windows Defender 防火墙 -> 启动或关闭 Windows Defender 防火墙),同时保证虚拟机的也在同一网段。
服务端
在作为服务端的设备上,新建server.py ,复制下面的代码,保存并运行。
from socket import *
tcp_server = socket(AF_INET, SOCK_STREAM)
address = ("192.168.1.2", 8000)
tcp_server.bind(address)
tcp_server.listen(128)
client_socket, clientAddr = tcp_server.accept()
from_client_msg=client_socket.recv(1024)
while(1):
from_client_msg = client_socket.recv(1024)
if(from_client_msg=="exit"):
break
print("接收的数据:",from_client_msg.decode("gbk"))
now_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
send_data = client_socket.send((str(now_time)+" 已收到!").encode("gbk"))
client_socket.close()
客户端
在作为客户端的设备上,新建client.py ,复制下面的代码,保存并运行(先运行服务端,再运行客户端)。
from socket import *
tcp_socket = socket(AF_INET,SOCK_STREAM)
serve_ip = "192.168.1.3"
serve_port = 8000
tcp_socket.connect((serve_ip,serve_port))
while(1):
send_data=input("Please input:")
tcp_socket.send(send_data.encode("gbk"))
if send_data == "exit":
break
from_server_msg=tcp_socket.recv(1024)
print(from_server_msg.decode("gbk"))
tcp_socket.close()
运行结果
先运行server.py ,再client.py ,两个设备间便可持续通信,直到客户端发送exit 断开连接。
|