Python socket網路編程TCP/IP伺服器與用戶端通訊,pythonsocket

來源:互聯網
上載者:User

Python socket網路編程TCP/IP伺服器與用戶端通訊,pythonsocket

Python socket網路編程

初學 python,前段時間買了兩本書《python 編程從入門到實踐》《Python 核心編程第三版》,第一本書主要講的是一些基本文法和一些基本的使用方法,而第二本則深入很多,自己看來也是一知半解,剛好看到了這部分網路編程,依然有好多不太理解的地方,不過想來通過自己不斷的摸索,不斷地搜尋資料學習,早晚應該會變得通透吧.......

這部分主要使用的模組就是 socket 模組,在這個模組中可以找到 socket()函數,該函數用於建立通訊端對象,通訊端也有自己的方法集,這些方法可以實現基於通訊端的網路通訊。

socket()模組函數

要建立通訊端,必須使用 socket.socket()函數,他一般的文法如下

socket(socket_family, socket_type, protocol=0)

其中socket_family是 AF_UNIX或 AF_INET,socket_type 是 SOCK_STREAM 或 SOCK_DGRAM,protocol 通常省略,預設=0.

所以建立 TCP/IP 通訊端,可以使用下面的方式調用 socket.socket().

tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

同樣建立 UDP/IP 通訊端,使用下面的方法調用

udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

建立 TCP 伺服器

建立 TCP 伺服器的流程基本如下,並非正真正的代碼

ss = socket()          #建立伺服器通訊端    ss.bind()              #通訊端與地址綁定    ss.listen()             #監聽串連    inf_loop:             #伺服器無限迴圈        cs = ss.accepr()   #接受用戶端串連        comm_loop:      #通訊迴圈            cs.recv()/cs.send()   #對話(接收/發送)        cs.close()        #關閉用戶端通訊端    ss.close()            #關閉伺服器通訊端(可選)

實際中建立 TCP 伺服器基本流程就如上邊所說,可能稍有不同但基本思路應該是相通的,下邊是真正穿件伺服器的代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-from socket import *      #將 socket 屬性引入到命名空間HOST = ''          #這是對 bind()方法的標識表示可以使用任何可用的地址PORT = 21571      #連接埠號碼BUFSIZ = 1024     #緩衝區大小,1kbADDR = (HOST,PORT)   #地址????tcpSerSocket = socket(AF_INET,SOCK_STREAM)    #建立 tcp 通訊端tcpSerSocket.bind(ADDR)           #將地址綁定到通訊端上tcpSerSocket.listen(5)            #設定並啟動通訊端監聽while True:        #無限迴圈,等待用戶端串連  print('waiting for connection...')     tcpCliSocket,addr = tcpSerSocket.accept()    #被動接受用戶端串連       print('...connected from:',addr)  while True:      #對話迴圈,等待用戶端發送訊息    data = tcpCliSocket.recv(BUFSIZ)   #接收用戶端訊息    if not data:     #如果訊息是空白,跳出對話迴圈,關閉當前串連      break    tcpCliSocket.send(data)   #如果收到訊息,將訊息原封不動返回用戶端  tcpCliSocket.close()tcpSerSocket.close()

建立 TCP 用戶端

同上邊一樣,一個簡單的非代碼流程

cs = socket()    #建立用戶端通訊端    cs.connect()     #嘗試串連伺服器    comm_loop:     #通訊迴圈        cs.send()/cs.recv()  #對話(發送/接收)    cs.close()       #關閉用戶端通訊端

實際中建立用戶端也是翻譯上邊的步驟

#!/usr/bin/env python# -*- coding: utf-8 -*-from socket import *HOST = 'localhost'    #伺服器的主機名稱PORT = 21571     #連接埠號碼BUFSIZ = 1024     #緩衝區ADDR = (HOST,PORT)   #地址tcpCliSocket = socket(AF_INET,SOCK_STREAM)  #建立用戶端通訊端tcpCliSocket.connect(ADDR)     #串連伺服器while True:        #通訊迴圈  data = input('> ')    #用戶端輸入資訊  if not data:   #如果輸入資訊為空白,則跳出迴圈,關閉通訊    break  data = str.encode(data)        tcpCliSocket.send(data)   #發送用戶端資訊  data = tcpCliSocket.recv(BUFSIZ)   #接受伺服器返回資訊  if not data:    #如果伺服器未返回資訊,關閉通訊迴圈    break  print('get:',data.decode('utf-8'))tcpCliSocket.close()

當然,這隻是最基礎的通訊,而且關於主機名稱,連接埠號碼之類的東西暫時還不是很懂,目前所做的只是在同一台電腦上通訊,連接埠號碼也需要一致,如果不同的電腦進行通訊該怎麼做?我還只是個小白.....

感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.