激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python實現的簡單文件傳輸服務器和客戶端

Python實現的簡單文件傳輸服務器和客戶端

2020-05-31 10:51腳本之家 Python

這篇文章主要介紹了Python實現的簡單文件傳輸服務器和客戶端,本文直接給出Server和Client端的實現代碼,需要的朋友可以參考下

還是那個題目(題目和流程見java版本),感覺光用java寫一點新意也沒有,恰巧剛學習了python,何不拿來一用,呵呵:
服務器端:

?
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
import SocketServer, time
 
class MyServer(SocketServer.BaseRequestHandler): 
  userInfo =
    'yangsq'  : 'yangsq'
    'hudeyong' : 'hudeyong'
    'mudan'   : 'mudan'
 
  def handle(self): 
    print 'Connected from', self.client_address 
      
    while True
      receivedData = self.request.recv(8192
      if not receivedData: 
        continue
        
      elif receivedData == 'Hi, server'
        self.request.sendall('hi, client'
          
      elif receivedData.startswith('name'): 
        self.clientName = receivedData.split(':')[-1
        if MyServer.userInfo.has_key(self.clientName): 
          self.request.sendall('valid'
        else
          self.request.sendall('invalid'
            
      elif receivedData.startswith('pwd'): 
        self.clientPwd = receivedData.split(':')[-1
        if self.clientPwd == MyServer.userInfo[self.clientName]: 
          self.request.sendall('valid'
          time.sleep(5
 
          sfile = open('PyNet.pdf', 'rb'
          while True
            data = sfile.read(1024
            if not data: 
              break
            while len(data) > 0
              intSent = self.request.send(data) 
              data = data[intSent:] 
 
          time.sleep(3
          self.request.sendall('EOF'
        else
          self.request.sendall('invalid'
            
      elif receivedData == 'bye'
        break
 
    self.request.close() 
      
    print 'Disconnected from', self.client_address 
    print
 
if __name__ == '__main__'
  print 'Server is started\nwaiting for connection...\n'
  srv = SocketServer.ThreadingTCPServer(('localhost', 50000), MyServer) 
  srv.serve_forever()


說明:
line-55到line-58的作用就相當于java中某個類里面的main函數,即一個類的入口。
python中SocketServer module里提供了好多實用的現成的類,BaseRequestHandler就是一個,它的作用是為每一個請求fork一個線程,只要繼承它,就有這個能力了,哈哈,真是美事。
當然,我們繼承了BaseRequestHandler,就是override它的handle方法,就像java中繼承了Thread后要實現run方法一樣。實際上這個handle方法的內容和我們的java版本的run函數實現的完全一樣。
line-30到line-43就是處理文件下載的主要內容了。看著都挺眼熟的呵:)
這里在文件發送完后發了一個“EOF”,告訴client文件傳完了。
客戶端:

?
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
import socket, time
 
class MyClient: 
 
  def __init__(self): 
    print 'Prepare for connecting...'
 
  def connect(self): 
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    sock.connect(('localhost', 50000)) 
 
    sock.sendall('Hi, server'
    self.response = sock.recv(8192
    print 'Server:', self.response 
 
    self.s = raw_input("Server: Do you want get the 'thinking in python' file?(y/n):"
    if self.s == 'y'
      while True
        self.name = raw_input('Server: input our name:'
        sock.sendall('name:' + self.name.strip()) 
        self.response = sock.recv(8192
        if self.response == 'valid'
          break
        else
          print 'Server: Invalid username'
 
      while True
        self.pwd = raw_input('Server: input our password:'
        sock.sendall('pwd:' + self.pwd.strip()) 
        self.response = sock.recv(8192
        if self.response == 'valid'
          print 'please wait...'
 
          f = open('b.pdf', 'wb'
          while True
            data = sock.recv(1024
            if data == 'EOF'
              break
            f.write(data) 
              
          f.flush() 
          f.close() 
 
          print 'download finished'
          break
        else
          print 'Server: Invalid password'
          
 
    sock.sendall('bye'
    sock.close() 
    print 'Disconnected'
 
if __name__ == '__main__'
  client = MyClient() 
  client.connect() 

line-34到line-41處理文件下載,client收到server的“EOF”信號后,就知道文件傳完了。
最后需要說明一下python的文件,由于是內置類型,所以不想java那樣有那么多的reader,writer,input,ouput啊。python中,在打開或建立一個文件時,主要是通過模式(mode)來區別的。
python的網絡編程確實簡單,因為它提供了各種功能的已經寫好的類,直接繼承就Ok了。
python還在學習中,上面的例子跑通是沒問題,但寫得肯定不夠好,還得學習啊

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 日韩大片在线永久观看视频网站免费 | 午夜视频免费在线观看 | 中国videos露脸hd | 在线观看欧美成人 | 看全色黄大色黄大片女图片 | 国产一区二区三区视频在线观看 | 日本中文字幕电影在线观看 | 久草在线资源观看 | 91久久国产综合精品女同国语 | 精品久久久久久久久久久久包黑料 | 久久精品视频首页 | 深夜福利视频免费观看 | 羞羞漫画无遮挡观看 | 日韩视频―中文字幕 | 亚洲欧美一区二区三区在线观看 | 久久影院在线观看 | 精品久久久久久久久久久αⅴ | 男女一边摸一边做羞羞视频免费 | 操操电影 | 国产毛片网站 | 九艹在线 | 久久精品视频黄色 | 一级做a爱片性色毛片 | 日韩av片在线播放 | 西川av在线一区二区三区 | 日韩欧美电影一区二区三区 | 国产成人精品午夜 | 久久千人斩| 成人黄色小视频在线观看 | 午夜爽爽爽男女免费观看hd | 黄色一级片免费在线观看 | 一本视频在线观看 | 被日视频 | 色屁屁xxxxⅹ在线视频 | 玩偶姐姐 在线观看 | 黄wwww | 国产精品久久久免费 | 免费一区在线 | 亚州综合一区 | 4399一级成人毛片 | 激情久久一区二区 |