[英]Python:Why my program does not continue anymore?
我是一个学生,用socket写了一个简单的http协议,但是我的程序卡在receiver1()方法上,下面没有回复,图片也没有传输。请你帮我解决这个问题吗?提前谢谢. 这是我的代码:
import argparse
import sys
import os
import time
from any_module1_receiver import receiver1
from any_module2_sender import sender1
from any_module2_sender import get_the_files
import threading
global severIp
def input_ip():
parser = argparse.ArgumentParser(description="ipaddress")
parser.add_argument('--ip', action="store", dest="ip", help=' ip_address ', default="127.0.0.1")
args = parser.parse_args()
print(args)
return parser.parse_args()
def identify_the_files_whether_exist():
if os.path.exists("share"):
while len(os.listdir("share")) == 0:
get_the_files()
time.sleep(0.1)
get_the_files()
else:
get_the_files()
print(get_the_files())
def getSeverIP(serverip):
serverIp = serverip
return serverIp
def main():
parser = input_ip()
identify_the_files_whether_exist()
severip = parser.ip
getSeverIP(severip)
print(severip)
t2 = threading.Thread(target=receiver1(), args=('This is thread 2',))
t2.start()
t1 = threading.Thread(target=sender1(getSeverIP(severip)), args=('This is thread 1',))
t1.start()
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
main()
接收器1模块:
def receiver1():
receive_port = 25000
server_socket = socket(AF_INET, SOCK_STREAM)
server_socket.bind(('', receive_port))
server_socket.listen(2)
print('The computer is ready to receive')
while True:
connection_socket, addr = server_socket.accept()
r_msg = connection_socket.recv(20480)
with open("xjtlu2.jpg"' "wb') as f:
f.write(r_msg)
f.close()
transmit_done = "done!"
connection_socket.send(transmit_done.encode())
server_socket.close()
sender1 模块:
[def get_the_files():
paths = \[\]
if os.path.isdir('share'):
print("the folder is exist")
print("seeking files in the folder")
for filepath, dirname, filenames in os.walk(r'share'):
for filename in filenames:
n = 0
print(filename)
paths.append(os.path.join(filepath, filename))
else:
print('the foleder is not exist, build a new one ')
os.makedirs("share")
print(paths)
return paths
def sender1(tip):
print("1")
target_ip2 = tip
print(target_ip2)
target_port = 25000
print(target_port)
client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect((target_ip2, target_port))
#for x in range(len(get_the_files())+1):
print(get_the_files()\[0\])
with open(get_the_files()\[0\], "rb") as f:
mag = f.read()
socket.send(mag)
feedback_1 = client_socket.recv(20480)
print('From Server:', feedback_1.decode())
client_socket.close()][1]
这是控制台面板 [1]: https : //i.stack.imgur.com/N399z.png
target 应该传入一个可调用对象。
args 是用于调用目标函数的参数元组。
在您的程序中,程序阻塞了receiver1
的while
循环。 因此,您应该进行以下更改:
t2 = threading.Thread(target=receiver1)
t2.start()
t1 = threading.Thread(target=sender1, args=(getSeverIP(severip),))
t1.start()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.