繁体   English   中英

Python:为什么我的程序不再继续?

[英]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

线程.Thread

target 应该传入一个可调用对象。
args 是用于调用目标函数的参数元组。

在您的程序中,程序阻塞了receiver1while循环。 因此,您应该进行以下更改:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM