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

首頁 > 編程 > Python > 正文

最基礎的Python的socket編程入門教程

2020-02-23 00:50:55
字體:
來源:轉載
供稿:網友

本文介紹使用Python進行Socket網絡編程,假設讀者已經具備了基本的網絡編程知識和Python的基本語法知識,本文中的代碼如果沒有說明則都是運行在Python 3.4下。

Python的socket功能封裝在socket庫中,要使用socket,記得先import socket,socket庫的詳細介紹參見官方文檔。
創建Socket

首先創建一個socket,使用socket庫中得socket函數創建。

import socket
# create an INET, STREAM sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

例子中創建了一個TCP socket,socket.socket函數的前兩個參數的默認值是socket.AF_INET和socket.SOCK_STREAM,創建TCP socket時可以直接寫成socket.socket()。
連接服務器

使用socket的connect函數連接到服務器,以下幾種參數都是合法的。

s.connect(('localhost', 8000))s.connect(('127.0.0.1', 8000))s.connect(('www.baidu.com', 80))

發送數據

發送數據有兩個方法send和sendall,send不能保證所有的數據都發送完了,它會返回已發送數據的長度,程序要循環發送數據直到所有數據都已發送完畢。

def mysend(s, msg):  total_len = len(msg)  total_sent = 0  while total_sent < total_len:    sent = s.send(msg[total_sent:])    if sent == 0:      raise RuntimeError("socket connection broken")    total_sent += sent

sendall能夠保證所有的數據都已發送完畢,除非發送過程中出現了錯誤,它實際上也是循環發送數據直到所有數據發送完成。

這里還要講一個需要特別注意的地方,從一個例子開始吧:

import sockets = socket.socket()s.connect(('www.baidu.com', 80))s.sendall('test')

都是上面講過的東西,沒什么特別的,分別在Python 2和Python 3中執行以上的代碼,結果是:

# Python 2.7>>> import socket>>> s = socket.socket()>>> s.connect(('www.baidu.com', 80))>>> s.sendall('test')

Python 2中執行成功。

# Python 3.4>>> import socket>>> s = socket.socket()>>> s.connect(('www.baidu.com', 80))>>> s.sendall('test')Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: 'str' does not support the buffer interface

Python 3中卻發生了異常。

同樣的代碼換個環境卻不能執行了,我沒有寫錯呀,怒砸電腦。好吧,你確實沒寫錯,是環境變了,導致這個結果的變化請移步官方的說明。
接收數據

使用recv函數接收數據:

data = s.recv(4096)

在Python 3中返回的是bytes對象,在Python 2中返回的是string。注意函數返回的數據長度是小于或者等于參數指定的長度的,要接收到指定長度的數據,需要循環接收數據。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 忻州市| 奇台县| 闻喜县| SHOW| 平凉市| 延庆县| 临夏县| 洮南市| 兴文县| 贡嘎县| 汪清县| 舞阳县| 宜章县| 汕头市| 惠安县| 祁东县| 许昌县| 招远市| 鄱阳县| 通州区| 长寿区| 新沂市| 广宗县| 于田县| 霞浦县| 邵东县| 永寿县| 抚远县| 肇东市| 汾阳市| 龙口市| 中阳县| 银川市| 聂荣县| 黄石市| 资讯 | 富阳市| 辽源市| 横山县| 岗巴县| 南投县|