Python網絡編程之TCP服務器客戶端(二)


  傳輸控制協議(官方術語為TCP/IP協議)是互聯網的重要組成部分。TCP的第一個版本是在1974年定義的,它建立在網際層協議(IP)提供的數據包傳輸技術之上。TCP使得應用程序可以使用連續的數據流進行相互通信,除非出現網絡原因導致連接中斷等意外情況,否則TCP都能保證數據流完整的傳輸給接收方,而不會發生丟包、重包或亂序的問題。

  傳輸文檔和文件的協議幾乎都是使用TCP的,這包括通過瀏覽器瀏覽網頁、文件傳輸以及用於電子郵件傳輸的所有主要機制。TCP協議是雙向通信的,需要先建立連接然后才能互相通信。其中涉及到一些通信、網絡相關方面的知識,這里不進行詳細解釋,如果不大了解,請自行去查看有關資料。

  TCP服務器的建立可以歸納如下:(1).開啟套接字(socket);(2).綁定服務端口;(3).開始監聽;(4).等待客戶端連接;(5).和客戶端對話。TCP服務器源程序代碼如下所示:

 1 #!/usr/bin/env python
 2 # coding=utf8
 3 
 4 from socket import *
 5 
 6 host = ''
 7 port = 12345
 8 bufsiz = 1024
 9 
10 tcpSerSock = socket(AF_INET, SOCK_STREAM)   # 開啟套接字
11 tcpSerSock.bind((host, port))               # 綁定服務端口
12 tcpSerSock.listen(5)                        # 開始監聽
13 
14 while True:
15     print 'Please waiting for connection...'      # 等待客戶端連接
16     tcpCliSock, addr = tcpSerSock.accept()
17     print '...connected from:', addr
18 
19     while True:
20         data = tcpCliSock.recv(bufsiz)      # 接收客戶端信息
21         if not data:
22             break
23         tcpCliSock.send('[%s] %s' % ("You send:", data))    # 給客戶端發送信息
24     tcpCliSock.close()
25     
26 tcpSerSock.close()

運行結果如下所示:

Please waiting for connection...

  TCP客戶端的創建可總結如下:(1).開啟套接字(socket);(2).連接服務器;(3).開始對話。TCP客戶端源程序代碼如下所示:

 1 #!/usr/bin/env python
 2 # coding=utf8
 3 
 4 from socket import *
 5 
 6 host = 'localhost'
 7 port = 12345
 8 bufsiz = 1024
 9 
10 tcpCliSock = socket(AF_INET, SOCK_STREAM)    # 開啟套接字
11 tcpCliSock.connect((host, port))             # 連接到服務器
12 
13 while True:
14     data = raw_input('> ')      # 等待輸入
15     if not data:
16         break
17     tcpCliSock.send(data)       # 發送信息
18     response = tcpCliSock.recv(bufsiz)       # 接受返回信息
19     if not response:
20         break
21     print response
22 
23 tcpCliSock.close()

執行客戶端源程序文件,可知:需要我們輸入信息,才能顯示返回信息;而回過頭再看一下服務端的運行結果,顯示結果如下所示:

Please waiting for connection...
...connected from: ('127.0.0.1', 52089)

注意:運行結果中的52089在不同情況下的顯示是不一樣的。接着,我們來驗證一下客戶端接收返回信息的功能,例如向客戶端源程序執行結果中輸入:Welcome to visit elijah7i's blog ! 

運行結果如下所示:

> Welcome to visit elijah7i's blog !
[You send:] Welcome to visit elijah7i's blog !
> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM