会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132647个问题
Python 全系列/第三阶段:Python 网络与并发编程/并发编程 76楼
Python 全系列/第三阶段:Python 网络与并发编程/并发编程 78楼
Python 全系列/第三阶段:Python 网络与并发编程/网络通信 79楼

服务端:

socket *
threading Thread


():    :
        recv_data = s.recvfrom()  recv_content = recv_data[].decode()
        (recv_contentrecv_data[])
        recv_content == :
            ()
            ():    addr = (, )  :
        data = ()
        s.sendto(data.encode(), addr)  data == :
            ()
            __name__ == :  s = socket(AF_INET, SOCK_DGRAM)  addr = (, )  t1 = Thread(=recv_data)
    t2 = Thread(=send_data)
    t1.start()
    t2.start()
    t1.join()
    t2.join()

客户端:

socket *
threading Thread
():    :
        recv_data = s.recvfrom()  recv_content = recv_data[].decode()
        (recv_contentrecv_data[])
        recv_content == :
            ()
            ():    addr = (, )  :
        data = ()
        s.sendto(data.encode(), addr)  data == :
            ()
            __name__ == :  s = socket(AF_INET, SOCK_DGRAM)  addr = (, )  t1 = Thread(=recv_data)
    t2 = Thread(=send_data)
    t1.start()
    t2.start()
    t1.join()
    t2.join()

报错:

请输入:Exception in thread Thread-1 (recv_data):

Traceback (most recent call last):

  File "D:\Program Files\Python\Lib\threading.py", line 1038, in _bootstrap_inner

    self.run()

  File "D:\Program Files\Python\Lib\threading.py", line 975, in run

    self._target(*self._args, **self._kwargs)

  File "C:\Users\Beson\PycharmProjects\py1\python网络与并发编程\网络编程\UDP多线程实现客户端.py", line 6, in recv_data

    recv_data = s.recvfrom(1024)  # 接收数据,1024表示接收的最大字节数

                ^^^^^^^^^^^^^^^^

OSError: [WinError 10022] 提供了一个无效的参数。


请求老师帮助解答

Python 全系列/第三阶段:Python 网络与并发编程/网络通信 80楼
Python 全系列/第三阶段:Python 网络与并发编程/网络通信 82楼
Python 全系列/第三阶段:Python 网络与并发编程/并发编程 83楼
Python 全系列/第三阶段:Python 网络与并发编程/并发编程 84楼
Python 全系列/第三阶段:Python 网络与并发编程/并发编程 86楼
Python 全系列/第三阶段:Python 网络与并发编程/并发编程 88楼

from threading import Thread
import time

class MyThread(Thread):

    def __init__(self, name) -> None:
        Thread.__init__(self)
        self.name = name
   
    def run(self):
        print(f"线程{self.name} start")

        print(time.time())
        for i in range(100):
            print(f"线程{self.name}:",i)
        time.sleep(3)
        print(time.time())

        print(f"线程{self.name} end ")

if __name__ == "__main__":
    print("主线程 start")

    # 创建线程
    t1 = MyThread("t1")
    t2 = MyThread("t2")
    # 守护线程 daemon
    t1.daemon = True
    t2.daemon = True
    # 启动线程
    t1.start()
    t2.start()
    # join()方法 等待子线程结束后再结束主线程
    # t1.join()
    # t2.join()

    print("主线程 end")

image.png

老师,这个代码我有几个问题:

1、主线程执行完毕和主线程结束不是一回事儿的话,主线程怎么样才算结束,是执行完毕后会有一个缓冲时间,去告诉系统,我执行完毕了,可以结束了吗?

2、这里执行结束后有这个报错,是我的代码问题吗,我和课上代码对比了没有发现代码哪里有问题呀;

3、这段代码里,我用time.time()方法试了一下,sleep函数貌似失效了,没有等待时间,是直接输出的,但是我不写在线程里,单独写一个测试sleep的代码的话是能正常使用的,这是什么原因。

Python 全系列/第三阶段:Python 网络与并发编程/并发编程 89楼
Python 全系列/第三阶段:Python 网络与并发编程/并发编程 90楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637