国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python socket網絡編程TCP/IP服務器與客戶端通信

2019-11-25 16:25:37
字體:
來源:轉載
供稿:網友

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

當然,這只是最基礎的通信,而且關于主機名,端口號之類的東西暫時還不是很懂,目前所做的只是在同一臺電腦上通信,端口號也需要一致,如果不同的電腦進行通信該怎么做?我還只是個小白.....

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜宾县| 凤凰县| 商城县| 那坡县| 微山县| 淅川县| 福州市| 鸡泽县| 久治县| 望城县| 曲沃县| 罗源县| 大港区| 方山县| 富蕴县| 高雄县| 温泉县| 伊吾县| 洛浦县| 无为县| 大宁县| 林甸县| 清水县| 灌云县| 榕江县| 德令哈市| 盘锦市| 呼和浩特市| 海阳市| 曲水县| 健康| 锡林郭勒盟| 和林格尔县| 策勒县| 大姚县| 萍乡市| 土默特左旗| 肇庆市| 唐海县| 象州县| 色达县|