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()


运行效果:164258958.png


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

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

lihuipeng
相关文章
|
14天前
|
传感器 数据采集 算法
python实现ModBusRTU客户端方式
python实现基于串口通信的ModBusRTU客户端是一件简单的事情,只要通过pymodbus模块就可以实现。
|
1月前
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送"Hello, Server!"后关闭。注意Android中需避免主线程进行网络操作。
48 4
|
10天前
|
网络协议 Python
在Python中,我们使用`socket`模块来进行网络通信。首先,我们需要导入这个模块。
在Python中,我们使用`socket`模块来进行网络通信。首先,我们需要导入这个模块。
|
13天前
|
Java 数据格式
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
16 0
|
26天前
|
Linux 数据安全/隐私保护 Python
使用Python实现Linux惠尔顿上网认证客户端
使用Python实现Linux惠尔顿上网认证客户端
22 0
|
27天前
|
机器学习/深度学习 网络协议 Python
Python Socket深度学习分享
Python Socket深度学习分享
10 0
|
29天前
|
Java
java使用ServerSocket和Socket实现客户端与服务端通讯
java使用ServerSocket和Socket实现客户端与服务端通讯
18 0
|
1月前
|
网络协议 Java Linux
探索Java Socket编程:实现跨平台客户端-服务器通信的奥秘
【6月更文挑战第21天】Java Socket编程示例展示了如何构建跨平台聊天应用。服务器端使用`ServerSocket`监听客户端连接,每个连接启动新线程处理。客户端连接服务器,发送并接收消息。Java的跨平台能力确保代码在不同操作系统上无需修改即可运行,简化开发与维护。
|
2月前
|
存储 Python
Python网络编程基础(Socket编程)UDP客户端编程
【4月更文挑战第9天】在UDP通信中,客户端负责发送数据到服务器,并接收来自服务器的响应。与服务器不同,客户端通常不需要绑定到特定的地址和端口,因为它可以临时使用任何可用的端口来发送数据。下面,我们将详细讲解UDP客户端编程的基本步骤。
|
2月前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。