Python socket实现文件传输的服务端与客户端

简介:

用python的socket模块实现的一个很简单的文件传输功能,不懂怎么写比较科学优雅,求各路大神指导

服务端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/python
#coding:utf-8
import  SocketServer
import  subprocess
import  string
import  time
class  MyTcpServer(SocketServer.BaseRequestHandler):
     def  recvfile( self , filename):
         print  "starting reve file!"
         =  open (filename,  'wb' )
         self .request.send( 'ready' )
         while  True :
             data  =  self .request.recv( 4096 )
             if  data  = =  'EOF' :
                 print  "recv file success!"
                 break
             f.write(data)
         f.close()
                                        
     def  sendfile( self , filename):
         print  "starting send file!"
         self .request.send( 'ready' )
         time.sleep( 1 )
         =  open (filename,  'rb' )
         while  True :
             data  =  f.read( 4096 )
             if  not  data:
                 break
             self .request.send(data)
         f.close()
         time.sleep( 1 )
         self .request.send( 'EOF' )
         print  "send file success!"
                                    
     def  handle( self ):
         print  "get connection from :" , self .client_address
         while  True :
             try :
                 data  =  self .request.recv( 4096 )
                 print  "get data:" , data  
                 if  not  data:
                     print  "break the connection!"
                     break               
                 else :
                     action, filename  =  data.split()
                     if  action  = =  "put" :
                         self .recvfile(filename)
                     elif  action  = =  'get' :
                         self .sendfile(filename)
                     else :
                         print  "get error!"
                         continue
             except  Exception,e:
                 print  "get error at:" ,e
                                            
                                        
if  __name__  = =  "__main__" :
     host  =  ''
     port  =  60000
     =  SocketServer.ThreadingTCPServer((host,port), MyTcpServer)
     s.serve_forever()



客户端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/python
#coding:utf-8
import  socket
import  sys
import  time
ip  =  '192.168.1.214'
port  =  60000
=  socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def  recvfile(filename):
     print  "server ready, now client rece file~~"
     =  open (filename,  'wb' )
     while  True :
         data  =  s.recv( 4096 )
         if  data  = =  'EOF' :
             print  "recv file success!"
             break
         f.write(data)
     f.close()
def  sendfile(filename):
     print  "server ready, now client sending file~~"
     =  open (filename,  'rb' )
     while  True :
         data  =  f.read( 4096 )
         if  not  data:
             break
         s.sendall(data)
     f.close()
     time.sleep( 1 )
     s.sendall( 'EOF' )
     print  "send file success!"
                                
def  confirm(s, client_command):
     s.send(client_command)
     data  =  s.recv( 4096 )
     if  data  = =  'ready' :
         return  True
                                
try :
     s.connect((ip,port))
     while  1 :
         client_command  =  raw_input ( ">>" )
         if  not  client_command:
             continue
                                    
         action, filename  =  client_command.split()
         if  action  = =  'put' :
             if  confirm(s, client_command):
                 sendfile(filename)
             else :
                 print  "server get error!"
         elif  action  = =  'get' :
             if  confirm(s, client_command):
                 recvfile(filename)
             else :
                 print  "server get error!"
         else :
             print  "command error!"
except  socket.error,e:
     print  "get error as" ,e
finally :
     s.close()


运行效果:


自娱自乐,好像挺有意思,哈哈。。。

本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1244632如需转载请自行联系原作者

lihuipeng
相关文章
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
139 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
150 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
24天前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
21 1
|
1月前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。
|
1月前
|
网络协议 测试技术 网络安全
Python编程-Socket网络编程
Python编程-Socket网络编程
|
4月前
|
网络协议 开发者 Python
深度探索Python Socket编程:从理论到实践,进阶篇带你领略网络编程的魅力!
【7月更文挑战第25天】在网络编程中, Python Socket编程因灵活性强而广受青睐。本文采用问答形式深入探讨其进阶技巧。**问题一**: Socket编程基于TCP/IP,通过创建Socket对象实现通信,支持客户端和服务器间的数据交换。**问题二**: 提升并发处理能力的方法包括多线程(适用于I/O密集型任务)、多进程(绕过GIL限制)和异步IO(asyncio)。**问题三**: 提供了一个使用asyncio库实现的异步Socket服务器示例,展示如何接收及响应客户端消息。通过这些内容,希望能激发读者对网络编程的兴趣并引导进一步探索。
56 4
|
4月前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
【7月更文挑战第25天】在网络应用蓬勃发展的数字时代,Python凭借其简洁的语法和强大的库支持成为开发高效应用的首选。本文通过实时聊天室案例,介绍了Python Socket编程的基础与进阶技巧,包括服务器与客户端的建立、数据交换等基础篇内容,以及使用多线程和异步IO提升性能的进阶篇。基础示例展示了服务器端监听连接请求、接收转发消息,客户端连接服务器并收发消息的过程。进阶部分讨论了如何利用Python的`threading`模块和`asyncio`库来处理多客户端连接,提高应用的并发处理能力和响应速度。掌握这些技能,能使开发者在网络编程领域更加游刃有余,构建出高性能的应用程序。
33 3
|
4月前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
64 2
|
4月前
|
网络协议 程序员 视频直播
|
4月前
|
消息中间件 网络协议 网络安全
Python Socket编程:打造你的专属网络通道,基础篇与进阶篇一网打尽!
【7月更文挑战第26天】在网络编程领域,Python以简洁语法和强大库支持成为构建应用的首选。Socket编程为核心,实现计算机间的数据交换。
68 1
下一篇
无影云桌面