#coding=utf-8 from socket import * from threading import Thread def recv_data(): while True: #读取客户端的消息 redata=tcp_client_socket.recv(1024).decode("gbk") #将消息输出到控制台 print(f"服务端说:{redata}") if redata=="end": break def send_data(): while True: #获取控制台信息 msg=input(">") #向服务器发数据 tcp_client_socket.send(msg.encode("gbk")) if __name__=="__main__": #创建Socket tcp_server_socket=socket(AF_INET,SOCK_STREAM) tcp_server_socket.bind(("",8888)) tcp_server_socket.listen() print("服务器已经启动,等待客户端连接") #接收客户端连接 tcp_client_socket,host=tcp_server_socket.accept() print("一个客户端建立连接成功") t1=Thread(target=recv_data) t2=Thread(target=send_data) t1.start() t2.start() t1.join() t2.join() tcp_server_socket.close() tcp_client_socket.close()
老师,又是这个报错,是为啥呀,为啥老师那样写就是对的
#coding=utf-8 from socket import * s=socket(AF_INET,SOCK_STREAM) s.bind(("127.0.0.1",8899)) #本机监听8899端口 s.listen(5) print("等待接收连接!") client_socket,client_info=s.accept() #client_socket表示新的客户端,client_socket表示新的客户端的ip及port print("一个客户端建立连接成功!") while True: #读取客户端消息 redata = client_socket.recv(1024) recontent=redata.decode('gbk') print(f"客户端说:{recontent}") if redata=="end": break #获取控制台信息 msg=input(">") client_socket.send(msg.encode("gbk")) client_socket.close() s.close()
老师,为什么我这个从服务端给客户端发消息但是客户端那边没有显示
#coding=utf-8 from socket import * s=socket(AF_INET,SOCK_STREAM) s.connect(("127.0.0.1",8899)) #连接服务器端 while True: msg=input(">") #向服务器发送数据 s.send(msg.encode("gbk")) if msg=="end": break #接收服务器端数据 redata=s.recv(1024) print("服务器端说:",redata.decode("gbk")) s.close()
#coding=utf-8 from socket import * from threading import Thread s=socket(AF_INET,SOCK_DGRAM) s.bind(("127.0.0.1",6666)) #不停接收 def recv_data(): while True: redata = s.recvfrom(1024) # 1024表示本次接收的最大字节数 print(redata) print(f"收到远程信息:{redata[0].decode('gbk')},from{redata[1]}") if redata == "88": print("结束聊天!") break def send_data(): while True: data = input("请输入:") addr = ("127.0.0.1", 8080) s.sendto(data.encode("gbk"),addr) if __name__=="__main__": #创建两个线程 t1=Thread(target=send_data)#创建线程时的函数名不用加班括号 t2=Thread(target=recv_data) t1.start() t2.start() t1.join() t2.join()
老师,我这个报错了,但是我对照了一下老师的两个文件id也是一样的呀
老师,有个问题奥,为什么当循环结束了之后程序还在一直运行中啊?
#coding=utf-8 from socket import * s=socket(AF_INET,SOCK_DGRAM) #创建套接字 #绑定接收信息端口 s.bind(("127.0.0.1",6666)) #ip地址和端口号,端口大于1024 print("等待接收数据!") redata=s.recvfrom(1024)#1024表示本次接收的最大字节数 print(redata) print(f"收到远程信息:{redata[0]},from{redata[1]}") s.close()
老师,我想知道第9行为什么是这样写呀,
f"收到远程信息:{redata[0]},from{redata[1]}")
这个表示啥意思呀,为什么就是收到来自redata【1】的redata【0】信息呢?是约定俗成吗?是不是每次写代码都要这样写呀
#coding=utf-8 import threading import time def chihuoguo(name): print(f"{name}已经启动") print(f"小伙伴{name}已经进入就餐状态") time.sleep(1) event.wait() print(f"{name}收到通知了") print(f"小伙伴{name}开吃咯") if __name__=="__main__": event=threading.Event #创建新线程 thread1=threading.Thread(target=chihuoguo,args=("tom",)) thread2=threading.Thread(target=chihuoguo,args=("cindy",)) thread1.start() thread2.start() time.sleep(10) print("通知来了,开吃!") event.set()
老师,为啥这个报错啊
#encoding=utf-8 from threading import Thread from time import sleep class Account: def __init__(self,money,name): self.money=money self.name=name #模拟提款操作 class Drawing(Thread): def __init__(self,drawingNum,account): Thread.__init__(self) self.drawingNum=drawingNum self.account=account self.expenseTotal=0 def run(self): lock.acquire() if self.account.money-self.drawingNum<0: return sleep(1) sleep.account.money-=self.drawingNum self.expenseTotal+=self.drawingNum lock.release() print(f"账户:{self.account.name},余额是:{self.account.money}") print(f"账户:{self.account.name},余额是:{self.expenseTotal}") if __name__=="__main__": a1=Account("小高",100) lock=Lock() draw1=Drawing(80,a1) #定义取钱线程对象 draw2=Drawing(80,a1) draw1.start() #你取钱 draw2.start() #另一个人取钱#
老师,我这个没有Lock()报错是怎么回事呀,好多次都是太远了
#encoding=utf-8 from threading import Thread from time import sleep def func1(name): for i in range(4): print(f"线程:{name}:{i}") sleep(1) #每打一个暂停一下 if __name__=="__main__": print("主线程,start") #创建线程 t1=Thread(target=func1,args=("t1,")) t2=Thread(target=func1,args=("t2,")) #启动线程 t1.start() t2.start() print("主线程,end")
老师,为什么我这个报错了呀,还有为啥第6行要加f啊?
为什么我的守护线程没有实现效果
import time from threading import Thread #通过类包装 class MyThread(Thread): def __init__(self,name): Thread.__init__(self) self.name = name def run(self): print(f'{self.name},start') for i in range(3): print(f'{self.name}线程:{i}') time.sleep(3) print(f'{self.name}线程,end') if __name__ == '__main__': print('主线程start') t1 = MyThread('t1') t2 = MyThread('t2') t1.daemon =True t1.start() t2.start() #等t1,t2线程结束才会继续执行主线程 print('主线程end')
我的主线程都已经结束了,为什么t1还是会继续执行???
前面这个‘f’什么作用?
import threading #用方法包装 def fun1(): print('f线程,start') for i in range(3): print('线程:{i}') print('f线程,end') #创建线程,使用threading方法 t1 = threading.Thread(target=fun1,args=('t1',)) t2 = threading.Thread(target=fun1,args=('t2',)) if __name__ == '__main__': print('主线程,start') t1.start() t2.start() print('主线程,end') 老师这个是什么原因报错的
#coding=utf-8 from threading import Thread from time import sleep def func1(name): print(f"线程{name},start") for i in range(3): print(f"线程:{name},{i}") sleep(5) print(f"线程{name},end") if __name__ == '__main__': print("主线程,start") #创建线程 t1 = Thread(target=func1,args=("t1,")) t2 = Thread(target=func1,args=("t2,")) #启动线程 t1.start() t2.start() print("主线程,end")
老师 这个是怎么回事呢
# 服务器端:一个线程专门发送消息,一个线程专门接收消息。 # 客户端:一个线程专门发送消息,一个线程专门接收消息。 # 结合多线程实现TCP双向传送(自由聊天) # 【示例】TCP服务端结合多线程实现自由收发信息 from socket import * from threading import Thread def recv_data(): while True: # 读取客户端的消息 re_data = tcp_client_socket.recv(1024) re_content =re_data.decode('gbk') # 将消息输出到控制台 print(f"客户端说:{re_content},from:{host}") if re_content == '88': break # 获取控制台信息 def send_data(): while True: msg = input(">") tcp_client_socket.send(msg.encode("gbk")) if __name__ == '__main__': tcp_server_socket = socket(AF_INET, SOCK_STREAM) tcp_server_socket.bind(('127.0.0.1', 8888)) tcp_server_socket.listen() print("服务端已经启动,等待客户端连接!") tcp_client_socket, host = tcp_server_socket.accept() print("一个客户端建立连接成功!") t1 = Thread(target=recv_data()) t2 = Thread(target=send_data()) t1.start() t2.start() t1.join() t2.join() tcp_client_socket.close() tcp_server_socket.close() from socket import * from threading import Thread def recv_data(): while True: redata=tcp_client_socket.recv(1024) recv_data=redata.decode('gbk') print(f"服务器端说:{recv_data}") def send_data(): while True: msg=input(">") tcp_client_socket.send(msg.encode("gbk")) if msg == '88': break if __name__ == '__main__': tcp_client_socket=socket(AF_INET,SOCK_STREAM) tcp_client_socket.connect(('127.0.0.1',8888)) print("连接建立成功") t1=Thread(target=recv_data()) t2=Thread(target=send_data()) t1.start() t2.start() t1.join() t2.join() tcp_client_socket.close() 这个持续通信中的发送消息接收信息判断为什么不生效,当输入88的时候
#coding=utf-8 '''双向通信Socket之客户端 将控制台输入的信息发送给服务器端 读取服务器端的数据,将内容输出到控制台''' from socket import * tcp_client_socket=socket(AF_INET,SOCK_STREAM) tcp_client_socket.connect(('127.0.0.1',8888)) while True: msg=input(">") tcp_client_socket.send(msg.encode("gbk")) if msg=='end': break redata=tcp_client_socket.recv(1024) recv_data=redata.decode('gbk') print(f"服务器端说:{recv_data}") tcp_client_socket.close() # TCP双向持续通信 # 【示例】TCP:双向通信Socket之服务器端 #coding=utf-8 from socket import * tcp_server_socket=socket(AF_INET,SOCK_STREAM) tcp_server_socket.bind(('127.0.0.1',8888)) tcp_server_socket.listen(5) print("服务端已经启动,等待客户端连接!") tcp_client_socket,host=tcp_server_socket.accept() print("一个客户端建立连接成功!") while True: re_data = tcp_server_socket.recv(1024) re_content =re_data.decode('gbk') print(f"客户端说:{re_content},from:{host}") if re_content == 'end': break msg = input(">") tcp_server_socket.send(msg.encode("gbk")) tcp_client_socket.close() tcp_server_socket.close() 客户端运行输入报错 >121 Traceback (most recent call last): File "C:/Users/Administrator/Desktop/python代码练习/udp.py", line 68, in <module> redata=tcp_client_socket.recv(1024) ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。 这个是为什么啊
'''【示例】UDP接收数据''' #coding=utf-8 from socket import * s=socket(AF_INET,SOCK_DGRAM)#创建套接字 s.bind(("127.0.0.1",8888)) print("等待接收数据!") redata =s.recvfrom(1024)#1024表示本次接收的最⼤字节数,s.recvfrom() '''接收UDP数据,与recv()类似,但返回值是 (data,address)。其中data是包含接收数据的字符 串,address是发送数据的套接字地址。''' print(f"收到远程消息:{redata[0]},from {redata[1]}") s.close() 运行结果
请输入:付水电费第三方第三方
print为什么一直打印不了
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637