python怎么使用插座通信传输数据

  介绍

这篇文章给大家分享的是有关python怎么使用插座通信传输数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

<强> 1。服务器端

功能:计算客户端传输过来的文件个数,文件总长度,字符串总次数,字符串总个数,数据总长度,并且总长度不大于max_len,否则服务器将断开联系

异常处理

import 插座   服务器=socket.socket ()   server.bind ((“localhost", 5555))   server.listen ()   康涅狄格州、地址=server.accept ()   ,   file_number=0 #文件个数   file_len=0 #文件总字长   data_number=0 #字符串个数   data_len=0 #数据长度   recv_len=0 #总字长   max_len=2000000   ,   #文件处理方法   file_number def  file_deal(数据):   ,,,with 开放(str (file_number) + & # 39; jpg # 39;, & # 39; wb # 39;) as  f:   ,,,,,,,f.write(数据)   ,,,print(“文件保存成功!“)   ,   ,   while 真正的:   ,,,试一试:   ,,,,,,,#传输数据超过max_len则断开数据传输   ,,,,,,,if  recv_len> max_len:   ,,,,,,,,,,,印刷(“客户端传输数据超过{}字节,服务器断开连接“.format (max_len))   ,,,,,,,,,,,印刷(“本次一共传输{}字节的数据那,其中字符串为{}字节,传输{}次,文件为有{}字节,传输{}次“.format (data_len, recv_len,还以为,data_number, file_len,, file_number))   ,,,,,,,,,,,# conn.send(“你已经超出传输范围{},服务器断开连接“.format (max_len))   ,,,,,,,,,,,休息   ,,,,,,,recv_data=https://www.yisu.com/zixun/conn.recv (1000)   # recv处理层!   #服务器和客户端达成协议,客户端向服务器端发来的指令:   #发送文件为2,发送数据为1,结束发送为4,继续发送为3   #发送处理层:   1 #回复为收到2为未收的到!   如果recv_data.decode (utf - 8)==' 1 ':   打印(“准备客户端发送过来的字符串!”)   data_recv=conn.recv (1000)   打印(“收到从客户端发送过来的字符串:“,data_recv.decode (utf - 8))   data_number +=1 #字符串总个数   recv_len len (data_recv) +=#总字长   data_len len (data_recv) +=#字符串总长   elif recv_data.decode (utf - 8)==?”:   打印(“准备接受客户端发送过来的文件”)   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)==?”:   打印(“客户端重新发送数据”)   data_recv=conn.recv (10000)   继续   其他:   打印(“客户端已断开联系!我也断开联系吧”)   data_recv=conn.recv (10000)   打印(“本次一共传输{}字节的数据那,其中字符串为{}字节,传输{}次,文件为有{}字节,传输{}次”。格式(recv_len、data_len data_number、file__len file_number))   打破   除了:   打印(“客户端突然中断”)   打破   server.close ()

<强> 2。客户端

功能:向服务器端发送文件和字符串,并进行异常处理

import 插座,操作系统   ,   def  isfile(文件名):   ,,,结果=os.path.exists(文件名)   ,,,return 结果   ,   def  readfile(文件名):   ,,,with 开放(文件名,& # 39;rb # 39;) as  f:   ,,,,,,,data=https://www.yisu.com/zixun/f.read ()   返回数据      specialchar=[' 1 ', ' 2 ', ' 3 ', ' 4 ']   客户=socket.socket ()   client.connect ((' localhost ', 5555))      而真正的:   试一试:   #如果client.recv (1000):   #打破   data_send=输入(“请输入您想发送的数据类型! 1为字符串2为文件4为结束发送3为继续发送:“).strip ()   如果data_send不在specialchar:   继续   client.send (data_send.encode (utf - 8))   如果data_send==' 1 ':   而真正的:   data_send=输入(“请输入您想发送的字符串:“).strip ()   如果data_send不在specialchar:   client.send (data_send.encode (utf - 8))   打破   其他:   继续   elif data_send==?”:   而真正的:   data_filename=输入(“请您输入你想发送的文件名:“).strip ()   如果isfile (data_filename):   client.send (readfile (data_filename))   打破   其他:   打印(“请重新输入文件!”)   继续   elif data_send==?”:   client.send (' 3 ' .encode (utf - 8))   继续   elif data_send==?”:   client.send (' 4 ' .encode (utf - 8))   打破   其他:   打印(“输入错误!请重新输入!”)   继续   除了:   打印(“服务器端突然中断!”)   打破      client.close ()

python怎么使用插座通信传输数据