本篇主要教大家用socket通信传输数据,具体内容我们往下看。
1.服务器端
功能:计算客户端传输过来的文件个数、文件总长度、字符串总次数、字符串总个数、数据总长度,并且总长度不大于max_len,否则服务器将断开联系
异常处理
import socket server=socket.socket() server.bind(("localhost",5555)) server.listen() conn,address=server.accept() file_number=0#文件个数 file_len=0#文件总字长 data_number=0#字符串个数 data_len=0#数据长度 recv_len=0#总字长 max_len=2000000 #文件处理方法 def file_deal(data,file_number): with open(str(file_number)+'.jpg','wb')as f: f.write(data) print("文件保存成功!") while True: try: #传输数据超过max_len则断开数据传输 if recv_len>max_len: print("客户端传输数据超过{}字节,服务器断开连接".format(max_len)) print("本次一共传输{}字节的数据那,其中字符串为{}字节,传输{}次,文件为有{}字节,传输{}次".format(recv_len, data_len, data_number, file_len, file_number)) #conn.send("你已经超出传输范围{},服务器断开连接".format(max_len)) break recv_data=conn.recv(1000) #recv处理层! #服务器和客户端达成协议,客户端向服务器端发来的指令: # 发送文件为2,发送数据为1,结束发送为4,继续发送为3 #send处理层: #回复1为收到,2为未收到! if recv_data.decode('utf-8')=='1': print("准备客户端发送过来的字符串!") data_recv=conn.recv(1000) print("收到从客户端发送过来的字符串:",data_recv.decode('utf-8')) data_number+=1#字符串总个数 recv_len+=len(data_recv)#总字长 data_len+=len(data_recv)#字符串总长 elif recv_data.decode('utf-8')=='2': print("准备接受客户端发送过来的文件") data_recv=conn.recv(100000000) file_deal(data_recv,file_number) file_number+=1#文件个数 recv_len += len(data_recv)#总字长 file_len+=len(data_recv)#文件总字长 elif recv_data.decode('utf-8')=='3': print("客户端重新发送数据") data_recv=conn.recv(10000) continue else: print("客户端已断开联系!我也断开联系吧") data_recv=conn.recv(10000) print("本次一共传输{}字节的数据那,其中字符串为{}字节,传输{}次,文件为有{}字节,传输{}次".format(recv_len, data_len, data_number, file__len, file_number)) break except: print("客户端突然中断") break server.close()
2.客户端
功能:向服务器端发送文件和字符串,并进行异常处理
import socket,os def isfile(filename): result=os.path.exists(filename) return result def readfile(filename): with open(filename,'rb')as f: data=f.read() return data specialchar=['1','2','3','4'] client=socket.socket() client.connect(('localhost',5555)) while True: try: #if client.recv(1000): #break data_send=input("请输入您想发送的数据类型!1为字符串2为文件4为结束发送3为继续发送:").strip() if data_send not in specialchar: continue client.send(data_send.encode('utf-8')) if data_send=='1': while True: data_send=input("请输入您想发送的字符串:").strip() if data_send not in specialchar: client.send(data_send.encode('utf-8')) break else: continue elif data_send=='2': while True: data_filename=input("请您输入你想发送的文件名:").strip() if isfile(data_filename): client.send(readfile(data_filename)) break else: print("请重新输入文件!") continue elif data_send=='3': client.send('3'.encode('utf-8')) continue elif data_send=='4': client.send('4'.encode('utf-8')) break else: print("输入错误!请重新输入!") continue except: print("服务器端突然中断!") break client.close()
实现功能:实时传输数据(包括字符串、文件),客户端文件的保存等。
3.socket通信优点
客户端:
向服务器端发送文件和字符串,并进行异常处理
服务器端:
计算客户端传输过来的文件个数、文件总长度、字符串总次数、字符串总个数、数据总长度,并且总长度不大于max_len,否则服务器将断开联系、异常处理。
本文来源于网络,如有雷同联系作者修改。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试