#encoding=utf-8 from socket import * from threading import Thread s=socket(AF_INET,SOCK_DGRAM) s.bind(("127.0.0.1",8080)) def recv_data(): while True: recv_data=s.recvfrom(1024) print("等待接收数据!") udp_data=recv_data[0].decode("gbk") print(f"接收的数据:{udp_data},from{recv_data[1]}") if udp_data=="88": print("结束聊天!") break def send_data(): while True: addr = ("127.0.0.1",8989) data=input("请输入数据:") s.sendto(data.encode("gbk"),addr) if __name__=="__main__": t1=Thread(target=recv_data) t2=Thread(target=send_data) t1.start() t2.start() t1.join() t2.join()
这是什么,老师好像没讲
为什么类里面的函数名一定要是run
老师,假如信号量是2,是不是只要其中的一个线程释放资源,下一个线程就可立马抢占资源 ,而不用等到两个线程同时释放资源,后面两个才会开始调用acquire?
我想请老师看看我的思路,看一下我的理解对不对。我对这个client_socket有点疑问。就像我画的图一样,从服务端来说,是通过accept方法收到一个socket对象,命名为client_socket。在接受数据的时候是用接受到的这个client_socket对象的recv方法,发送数据也是通过这个对象的send的方法。也就是说,服务端的收发数据是以通过accept方法接收到的socket对象实现的,至于这个socket对象的命名无所谓。和自己创建的sever_socket没关系。
从客户端来说,是自己创建了一个socket对象,命名为client_socket,收发数据也是通过这个自己创建的对象相应的方法来实现的。
而这两个client_socket对象没有关系。
为什么这里要传,而线程那里不用传,是有类的原因吗
老,为什么Process.__init__(slef)不可以放在self.name=name的下面
那里为什么可以不用加else
1、这里睡着了是什么意思,线程2为什么还会判断依然是100,可以继续取钱。
2、这里初始化些什么,不使用这段代码为什么不可以
from socket import * #最简化的UDP服务端代码 from threading import Thread def recv_data(): while True: recv_data = s.recvfrom(1024) # 1024表示本次接收的最大字节数 recv_content = recv_data[0].decode('gbk') print(f"收到远程信息:{recv_content},from{recv_data[1]}") if recv_content == "88": print("结束聊天") break def send_data(): addr = ("127.0.0.1", 8888) while True: data = input("请输入:") s.sendto(data.encode("gbk"), addr) if data == "88": print("结束聊天") break if __name__ == '__main__': s = socket(AF_INET, SOCK_DGRAM) # 创建UDP的套接字 s.bind(("127.0.0.1", 9999)) # 绑定端口 t1 = Thread(target=recv_data()) t2 = Thread(target=send_data()) t1.start() t2.start() t1.join() t2.join()
老师,请问我运行的时候为啥没有请输入和收到远程信息这两个提示呢,我分开的程序就有
老师这里面run函数中的self.account.money可以被调用是因为下面使用类的组合了吧,就是draw1 = Drawing(80,a1).如果主程序中不用组合,那这里是不是就不可以调用money了?
老师这是为什么?
不理解为什么“服务端”与“客户端”这两个地方一样,我想“服务端”应为“serve_socket.sendto(msg.encode(”gbk“)),可这样运行会报错,请老师解答一下我的疑点
from socket import* from threading import Thread def recv_data(): while True: recv_data = client_socket.recv(1024) recv_content = recv_data.decode('gbk') print(f"客户端说:{recv_content},来自:{client_info}") if recv_data == 'end': print('结束') break def send_data(): while True: msg = input('>') client_socket.send(msg.encode('gbk')) if msg == 'end': print('结束') break if __name__ == '__main__': server_socket = socket(AF_INET, SOCK_STREAM) # 建立TCP套接字 server_socket.bind(('127.0.0.1', 8989)) # 本机监听8989端口 server_socket.listen(5) print('等待接收连接') client_socket, client_info = server_socket.accept() print('一个客户端连接成功') t1 = Thread(target=recv_data) t2 = Thread(target=send_data) t1.start() t2.start() t1.join() t2.join() client_socket.close() server_socket.close()
这是怎么回事?
from socket import* from threading import Thread s = socket(AF_INET, SOCK_DGRAM) s.bind(("127.0.0.1", 8979)) def recv_data(): while True: data = s.recvfrom(1024) print(f"收到远程信息:{data[0].decode('gbk')},来自:{data[1]}") if data[0].decode('gbk') == "88": print("聊天结束") break def send_data(): while True: data = input("请输入:") add = (("127.0.0.1", 8081)) s.sendto(data.encode("gbk"), add) if data == "88": print("聊天结束") break if __name__ == '__main__': t1=Thread(target=send_data()) t2=Thread(target=recv_data()) t1.start() t2.start() t1.join() t2.join()
为什么输入“88”,才接收到信息,如果输入其他的,则是一直显示请输入
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637