Python套接字调用main.py中的server.py和client.py
我的问题是,如何在main方法中顺序调用服务器和客户端 问题是python调试器正在等待并被吸入调用服务器的队列(阻塞调用客户机的队列) 我试过穿线,但没有工作。谢谢你的关注 重要提示:下面的代码使用Python2 主python文件:Python套接字调用main.py中的server.py和client.py,python,tcpclient,tcpserver,tcpsocket,Python,Tcpclient,Tcpserver,Tcpsocket,我的问题是,如何在main方法中顺序调用服务器和客户端 问题是python调试器正在等待并被吸入调用服务器的队列(阻塞调用客户机的队列) 我试过穿线,但没有工作。谢谢你的关注 重要提示:下面的代码使用Python2 主python文件: import xClient import xServer import threading tempServer=xServer tempClient=xClient thrMain = threading.Thread(target=tempServe
import xClient
import xServer
import threading
tempServer=xServer
tempClient=xClient
thrMain = threading.Thread(target=tempServer.innerClient.Main())
thrMain.start()
thrMain.join()
tempClient.innerClient.Main()
xClient.py:#标准客户端代码,工作正常
import socket
import time
class innerClient:
def Main():
time.sleep(2)
host = '127.0.0.1'
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
message = "test message"
while True:
s.send(message.encode('ascii'))
data = s.recv(1024)
print('Received from the server :', str(data.decode('ascii')))
ans = raw_input('Continue(y/n) :')
if ans == 'y':
continue
else:
break
s.close()
import socket
import threading
class innerServer:
print_lock = threading.Lock()
# thread fuction
def threaded(c):
while True:
data = c.recv(1024)
if not data:
print('See you later')
print_lock.release()
break
data = data[::-1]
c.send(data)
c.close()
def Main():
host = ""
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print("socket binded to post", port)
s.listen(5)
print("socket is listening")
while True:
c, addr = s.accept()
print_lock.acquire()
print('Connected to :', addr[0], ':', addr[1])
thr = threading.Thread(target=threaded, args=(c,))
thr.start()
thr.join()
s.close()
xServer.py:#标准服务器代码,工作正常
import socket
import time
class innerClient:
def Main():
time.sleep(2)
host = '127.0.0.1'
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
message = "test message"
while True:
s.send(message.encode('ascii'))
data = s.recv(1024)
print('Received from the server :', str(data.decode('ascii')))
ans = raw_input('Continue(y/n) :')
if ans == 'y':
continue
else:
break
s.close()
import socket
import threading
class innerServer:
print_lock = threading.Lock()
# thread fuction
def threaded(c):
while True:
data = c.recv(1024)
if not data:
print('See you later')
print_lock.release()
break
data = data[::-1]
c.send(data)
c.close()
def Main():
host = ""
port = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print("socket binded to post", port)
s.listen(5)
print("socket is listening")
while True:
c, addr = s.accept()
print_lock.acquire()
print('Connected to :', addr[0], ':', addr[1])
thr = threading.Thread(target=threaded, args=(c,))
thr.start()
thr.join()
s.close()
如果调用
thrMain.join()
,则在线程(运行服务器)退出之前,执行不会继续执行该行。如果希望服务器和客户端同时运行,则不需要加入服务器线程。我尝试了您的建议,但在调试代码时,它在这一行代码中出现阻塞:thrMain=threading.thread(target=tempServer.innerClient.Main())它甚至无法通过thrMain.start()因此,在服务器调用方法之后,任何一行代码都不会工作。threading.Thread(target=tempServer.innerClient.Main())
意味着立即调用Main()
,并将其结果用作在线程中运行的函数。摆脱()
。这就是你这个疯狂的程序员的答案。很长一段时间后,感谢您的关注。