Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从单个python脚本或GUI按钮运行服务器和客户端python脚本_Python_Sockets - Fatal编程技术网

从单个python脚本或GUI按钮运行服务器和客户端python脚本

从单个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

我一直在使用python服务器和客户端通信。为了建立连接,服务器通常需要从单独的python脚本运行第一个客户端,然后运行第二个客户端

我现在想要的是让它自动化。我想从单个python脚本或GUI按钮运行服务器和客户端。我一直在尝试不同的方法,如多处理和多线程,但它不起作用

请给我一些建议

下面是服务器和客户端代码示例:

Server.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))
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