新人学python用socket写的一个通信,可以帮我看看有什么错误吗
我打算实现一个服务器端多线程的socket的聊天,发送文件的功能,可是在pycharm上运行时,总是卡在输入文件名后就不向下运行了。能帮我看看到底错在哪吗?用python自带的编辑器也得不停的按回车才能向下运行。{:1_893:}
import socket
import threading
import datetime
importos
class ChatServer:
def __init__(self,ip='',port=8000):
self.addr=(ip,port)
self.sock=socket.socket()
self.client={}
self.event=threading.Event()
self.file=True
def start(self):
self.sock.bind(self.addr)
self.sock.listen()
threading.Thread(target=self.accept,name='accept').start()
def accept(self):
while True:
s,raddr=self.sock.accept()
print(raddr)
print(s)
self.client=s
threading.Thread(target=self.recv,name='recv',args=(s,)).start()
def recv(self,sock:socket.socket):
while True:
if self.file == True:
filename = input('请输入要发送的文件名:')
if os.path.isfile(filename):# 判断文件存在
print('文件存在')
size = os.stat(filename).st_size# 获取文件大小
sock.send('{}'.format(filename).encode())
sock.send(str(size).encode("utf-8"))# 发送数据长度
print("发送的大小:", size)
f = open(filename, "rb")
for line in f:
sock.send(line)# 发送数据
f.close()
else:
print('文件不存在')
self.file=False
data=sock.recv(1024)
if not data:
break
print('%s,%s : %s' % (datetime.datetime.now().strftime('%Y/%m/%d-%H:%M:%S'),threading.current_thread(), data.decode()))
if 'AllSend' in str(data):
msg='{} {} {}'.format(sock.getpeername(),
datetime.datetime.now().strftime('%Y/%m/%d-%H:%M:%S'),
data.decode()).encode()
for s in self.client.values():
s.send(msg)
else:
sock.sendall('ack {}:{}'.format(datetime.datetime.now().strftime('%Y/%m/%d-%H:%M:%S'),data.decode()).encode())
def stop(self):
for c in self.client.values():
c.close()
self.sock.close()
def main():
cs=ChatServer()
cs.start()
while True:
cmd=input('>>>')
if cmd.strip()=='quit':
cs.stop()
threading.Event.wait(3)
break
elif cmd.strip()=='发送文件':
cs.file=True
print(threading.enumerate())
if __name__ == '__main__':
main()
本帖最后由 邓大侠 于 2019-10-19 16:55 编辑
recv 和send 是堵塞的,不要在外部发送这个发送文件的代码.
服务端和客户端堵住了,都在发送数据.无法正常响应.
cmd的input和filename的input重合了,获取到的文件总是空. 邓大侠 发表于 2019-10-19 16:45
recv 和send 是堵塞的,不要在外部发送这个发送文件的代码.
服务端和客户端堵住了,都在发送数据.无法正常响 ...
哦哦哦 谢谢你啊 那你觉得应该怎么修改呢
页:
[1]