Python socket網路程式設計TCP/IP伺服器與客戶端通信
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 #缓冲区大小,1kb ADDR = (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()
當然,這只是最基礎的通信,而且關於主機名,端口號之類的東西暫時還不是很懂,目前所做的只是在同一台電腦上通信,端口號也需要一致,如果不同的電腦進行通信該怎麼做?我還只是個小白.....
感謝閱讀,希望能幫助大家,謝謝大家對本站的支持!
更多Python socket網路程式設計TCP/IP伺服器與客戶端通訊相關文章請關注PHP中文網!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

在Python中,如何通過字符串動態創建對象並調用其方法?這是一個常見的編程需求,尤其在需要根據配置或運行...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途
