python - Python:为什么我的程序不再继续?
问题描述
我是一名学生,使用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 是用于调用目标函数的参数元组。
在您的程序中,程序会阻塞while
内部的循环receiver1
。因此,您应该进行以下更改:
t2 = threading.Thread(target=receiver1)
t2.start()
t1 = threading.Thread(target=sender1, args=(getSeverIP(severip),))
t1.start()
推荐阅读
- swift - 在 SwiftUI MacOS 应用程序中存储配置的推荐方式
- c++ - 为什么输出与我预期的角度到弧度转换的输出不同?
- python - 将字符串转换为 dict 并返回的优雅方法
- python - PyPandoc 在从 html 转换为 Latex 时包括超目标
- php - 如何仅通过子主题功能更改“apply_filters”的值?
- c# - DateTime 的高级数据表行过滤器 - 一周中的特定日期
- angular - ngbDropdown 不适用于 cdkDrag Angular 11.0.3
- python - 在 Python 中扫描透视图像
- quarkus - 为什么在 1.10.5 版中构建 Quarkus Microprofile 应用程序。Final 因缺少必需的类 org/jboss/builder/item/BuildItem 而失败?
- java - 从参数类实例化新对象