从单个python脚本或GUI按钮运行服务器和客户端python脚本
我一直在使用python服务器和客户端通信。为了建立连接,服务器通常需要从单独的python脚本运行第一个客户端,然后运行第二个客户端 我现在想要的是让它自动化。我想从单个python脚本或GUI按钮运行服务器和客户端。我一直在尝试不同的方法,如多处理和多线程,但它不起作用 请给我一些建议 下面是服务器和客户端代码示例: Server.py从单个python脚本或GUI按钮运行服务器和客户端python脚本,python,sockets,Python,Sockets,我一直在使用python服务器和客户端通信。为了建立连接,服务器通常需要从单独的python脚本运行第一个客户端,然后运行第二个客户端 我现在想要的是让它自动化。我想从单个python脚本或GUI按钮运行服务器和客户端。我一直在尝试不同的方法,如多处理和多线程,但它不起作用 请给我一些建议 下面是服务器和客户端代码示例: Server.py import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('0
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 5005))
s.listen(1)
conn, addr = s.accept()
while 1:
data = conn.recv(1024)
print("received data",list(data))
if not data:
break
conn.sendall(data)
conn.close()
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('0.0.0.0', 5005))
message = bytearray([1])
s.sendall(message)
data = s.recv(1024)
s.close()
print ('Received', repr(data))
Client.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 5005))
s.listen(1)
conn, addr = s.accept()
while 1:
data = conn.recv(1024)
print("received data",list(data))
if not data:
break
conn.sendall(data)
conn.close()
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('0.0.0.0', 5005))
message = bytearray([1])
s.sendall(message)
data = s.recv(1024)
s.close()
print ('Received', repr(data))
我们可以通过分配两个不同的函数来处理它。请注意:
- 当两个不同的线程试图在同一个流中打印某些内容时,它们应该首先获取一个公共锁,以便按顺序打印某些内容
- 服务器开始监听
表示它准备好接受来自任何地方的连接。另一方面,在计算机上运行客户端时,应该连接到“0.0.0.0”
或localhost
,而不是连接到127.0.0.1
0.0.0
导入线程
导入套接字
stream_lock=threading.lock()
def server_func():
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s、 绑定(('0.0.0.0',5005))
s、 听(1)
conn,addr=s.accept()
而1:
数据=conn.recv(1024)
#获取打印流锁非常重要
流_lock.acquire()
打印(“收到的数据”,列表(数据))
stream_lock.release()
如果没有数据:
打破
conn.sendall(数据)
康涅狄格州关闭
def client_func():
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s、 连接(('127.0.0.1',5005))
message=bytearray([1,2,3])
s、 发送全部(消息)
数据=s.recv(1024)
s、 关闭()
流_lock.acquire()
打印('已接收',报告(数据))
stream_lock.release()
t_server=threading.Thread(target=server_func.start())
t_client=threading.Thread(target=client_func.start())
#输出:
#接收到的数据[1,2,3]
#收到b'\x01\x02\x03'
非常感谢!这真的很有帮助D