基本上,我有一个python客户端发送命令要求服务器做些事情,我已经实现了线程,但似乎无法正常工作。例如,当我向服务器发送“start”命令时,它将执行job_function,但在此期间,客户端正在冻结。所以基本上,我希望我的服务器仍然能够在执行任务时响应客户端的请求,这就是我使用线程的原因。
Server.py:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 5005)) # Bind to the port
s.listen(1) # Now wait for client connection.
c, addr = s.accept() # Establish connection with client.
while True:
print('Got connection from', addr)
data = c.recv(1024).decode()
print(data)
if data == "start":
print("start the service")
c.sendall('started service'.encode())
threading.Thread(target=job_function).start()
elif data == "suspend":
print("suspend service")
c.sendall('suspended service'.encode())
else:
c.sendall('wrong command'.encode())
c.close() # Close the connection
Client.py:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1',5005))
while True:
x = input("Enter command: ")
s.sendall(x.encode())
print(x)
data = s.recv(1024).decode()
print(data)
s.close()
答案 0 :(得分:0)
也可以仅使用 recv() 函数来完成。
客户端:
sssize = os.stat('fileName').st_size
file = open('fileName', 'rb')
amm = file.read(sssize)
dfd = amm
#########
c.send(bytes(str(sssize), 'utf-8'))
rrespo = c.recv(1024).decode()
######
if rrespo == 'yess':
m = 0
lenmsg = 1024
loop = (int((sssize) / lenmsg))
if (sssize)<lenmsg:
c.send(dfd[0:sssize])
else:
dddf='oksend'
for ioo in range(0, loop):
if dddf=='oksend':
c.send(dfd[ioo * lenmsg:ioo * lenmsg + lenmsg])
stloop = ioo * lenmsg + lenmsg
print(int(m / (loop - 1) * 100))
m = m + 1
dddf = c.recv(6).decode()
print(dddf, ioo)
nextloop = sssize - loop * lenmsg
if nextloop > 0:
c.send(dfd[stloop:stloop + nextloop])
file.close()
print('file transffered successfully')
服务器端:
filename = input(str("Enter file name :")
fill = open(filename, 'wb')
c.send(bytes(commm, 'utf-8'))
# sizze=c.recv(1024).decode()
# print('size')
# print(sizze)
# c.send(bytes('done', 'utf-8'))
fileSize = c.recv(1024).decode()
c.send(bytes('yess', 'utf-8'))
lenmsg=1024
loop = int(int(fileSize) / lenmsg)
if (int(fileSize))<lenmsg:
image = c.recv(int(fileSize))
fill.write(image)
else:
for i in range(0, loop):
image = c.recv(lenmsg)
fill.write(image)
print('completed downloading:', int((i / (loop - 1) * 100)), '%')
c.send(bytes('oksend', 'utf-8'))
nextloop = int(fileSize) - loop * lenmsg
if nextloop > 0:
image = c.recv(nextloop)
fill.write(image)
fill.close()
print('file downloaded successfully')