Python中的TCP socket寫法示例
前言
本文主要介紹了關(guān)于Python中TCP socket的寫法,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
一、 服務(wù)器server的寫法:
1. 創(chuàng)建 socket 套接字:
網(wǎng)絡(luò)編程接口 socket(family = AF_INET , type = SOCKET_STREM,proto = 0, fileno = None) 提供了多種socket family。AF_INET 是默認(rèn)的family,需要綁定IP和端口。 127.0.0.1是一個特殊的IP地址,表示本機地址。如果綁定到這個地址,客戶端必須同時在本機運行才能連接,也就是說,外部的計算機無法連接進(jìn)來。
不同的協(xié)議family使用的地址形式不同,通常來說我們使用的是AF_INET-----地址是以(IP,PORT)形式存。在type 類型,我們常用的有兩種 SOCKET_STREM ,流式套接字,表示基于連接的TCP套接字,SOCKET_DGRAM, 數(shù)據(jù)報套接字,基于無連接的(UDP)接口?!∪绻辉O(shè)定,默認(rèn)就是 SOCKET_STREM 。
2. bind 綁定
使用方法:socket.bind(address) 把套接字綁定在 address 上,address的形式 根據(jù) family 來設(shè)定。不管是client還是server,創(chuàng)建socket的時候都是通過一個本地的文件來進(jìn)行的?! ?/p>
3. listen 監(jiān)聽
使用方法:socket.listen([backlog]) 使能 socket 接收連接請求,listen(self,backlog = None) ,backlog需要大于0,指定了可以緩存的連接請求的數(shù)量。
4. accept 接受請求連接
在等待一個即將來臨的連接,會返回一個代表連接的新的socket,還會返回一個地址(host和port),可以用兩個東西接收,前一個代表新的socket,后一個就是接收地址。
寫的方法:connet_socket,client_addr = srv.accept() connet_socket就是新的socket,然后connet_socket開始接下來的傳輸。connet_socket,client_addr,前者表示接收的新的socket,后者就是地址,具體看程序第10行。
5. 接收數(shù)據(jù)
使用方法:socket.recv(bufsize[,flags]) 從 socket 中接收數(shù)據(jù),返回的是 bytes ,是接收到的內(nèi)容。bufsize指定了一次最多接收多少個數(shù)據(jù),如果沒有數(shù)據(jù)接收,程序會阻塞,一直到有數(shù)據(jù)或者遠(yuǎn)程終端斷開連接.
6. 發(fā)送數(shù)據(jù)
使用方法:socket.send(bytes[, flags]) 你的socket必須和遠(yuǎn)程的socket建立了聯(lián)系,返回值是發(fā)送的數(shù)量,可以判斷你的數(shù)據(jù)是否發(fā)送完畢,如果沒有,繼續(xù)send余下來的數(shù)據(jù)
import socket hostname = '127.0.0.1' #設(shè)置主機名 port = 6666 #設(shè)置端口號 要確保這個端口號沒有被使用,可以在cmd里面查看 addr = (hostname,port) srv = socket.socket() #創(chuàng)建一個socket srv.bind(addr) srv.listen(5) print("waitting connect") while True: connect_socket,client_addr = srv.accept() print(client_addr) recevent = connect_socket.recv(1024) print(str(recevent,encoding='gbk')) connect_socket.send.send(bytes("你好,數(shù)據(jù)傳輸完成,這里是gaby-yan--server",encoding='gbk')) connect_socket.close()
二、 客戶端client的寫法:
客戶端的寫法相對比較簡單,只有
1.創(chuàng)建socket
2. 建立連接 connect
3. 發(fā)送 send
4. 接收recv
這是由于他們的傳遞編程框架不同造成的,如圖。
import socket hostname = '127.0.0.1' port = 7777 addr = (hostname,port) clientsock = socket.socket() ## 創(chuàng)建一個socket clientsock.connect(addr) # 建立連接 say = input("輸入你想傳送的消息:") clientsock.send(bytes(say,encoding='gbk')) #發(fā)送消息 recvdata = clientsock.recv(1024) #接收消息 recvdata 是bytes形式的 print(str(recvdata,encoding='gbk')) # 我們看不懂bytes,所以轉(zhuǎn)化為 str clientsock.close()
注意:先運行server的代碼,再運行client的代碼。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- Java基于TCP協(xié)議socket網(wǎng)絡(luò)編程的文件傳送的實現(xiàn)
- Java多線程實現(xiàn)TCP網(wǎng)絡(luò)Socket編程(C/S通信)
- java實現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)socket編程(C/S通信)
- Python使用socket_TCP實現(xiàn)小文件下載功能
- Python使用socket模塊實現(xiàn)簡單tcp通信
- python 使用raw socket進(jìn)行TCP SYN掃描實例
- python基于socket實現(xiàn)的UDP及TCP通訊功能示例
- python使用socket創(chuàng)建tcp服務(wù)器和客戶端
- python TCP Socket的粘包和分包的處理詳解
- TCP socket SYN隊列和Accept隊列區(qū)別原理解析
相關(guān)文章
python 定義類時,實現(xiàn)內(nèi)部方法的互相調(diào)用
今天小編就為大家分享一篇python 定義類時,實現(xiàn)內(nèi)部方法的互相調(diào)用,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12對Python3中的print函數(shù)以及與python2的對比分析
下面小編就為大家分享一篇對Python3中的print函數(shù)以及與python2的對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Keras: model實現(xiàn)固定部分layer,訓(xùn)練部分layer操作
這篇文章主要介紹了Keras: model實現(xiàn)固定部分layer,訓(xùn)練部分layer操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06淺談Python數(shù)據(jù)處理csv的應(yīng)用小結(jié)
這篇文章主要介紹了Python數(shù)據(jù)處理csv的簡單應(yīng)用,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01Python+Selenium實現(xiàn)瀏覽器的控制操作
這篇文章主要為大家詳細(xì)介紹了Python+Selenium如何實現(xiàn)常見的瀏覽器控制操作,例如:瀏覽器參數(shù)設(shè)置、控制瀏覽器前進(jìn)/后退等,感興趣的可以了解一下2022-09-09關(guān)于爬蟲中scrapy.Request的更多參數(shù)用法
這篇文章主要介紹了關(guān)于爬蟲中scrapy.Request的更多參數(shù)用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Python??序列化反序列化和異常處理的問題小結(jié)
這篇文章主要介紹了Python?序列化反序列化和異常處理,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12使用Pygal庫創(chuàng)建可縮放的矢量圖表的操作方法
在本文中,我們探討了如何使用Pygal庫創(chuàng)建可縮放的矢量圖表,首先,我們介紹了Pygal的基本概念和安裝方法,然后通過多個示例演示了如何創(chuàng)建各種類型的圖表,包括折線圖、柱狀圖、餅圖、散點圖、雷達(dá)圖和地圖等,需要的朋友可以參考下2024-05-05