Python中得socket網(wǎng)絡(luò)模塊介紹

    目錄

    前言:

    Python3 提供了兩個級別訪問得網(wǎng)絡(luò)服務(wù):

    • 低級別得網(wǎng)絡(luò)服務(wù)支持基本得 Socket,它提供了標準得 BSD Sockets API,可以訪問底層操作系統(tǒng)Socket接口得全部方法。
    • 高級別得網(wǎng)絡(luò)服務(wù)模塊 SocketServer, 它提供了服務(wù)器中心類,可以簡化網(wǎng)絡(luò)服務(wù)器得開發(fā)。

    Socket

    Socket又稱"套接字",應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求,使主機間或者一臺計算機上得進程間可以通訊。

    Python 中,我們使用 socket 模塊得 socket 函數(shù)來創(chuàng)建一個 socket 對象。語法格式如下:

    socket.socket ( family ,type ,proto)

    參數(shù);

    • family: 套接字家族可以使 AF_UNIX 或者 AF_INET
    • type: 套接字類型,可以根據(jù)是面向連接得 SOCK_STREAM 還是非連接得 SOCK_DGRAM
    • protocol: 一般不填,默認為 0

    服務(wù)端(server.py)

    import socketserver=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #創(chuàng)建socket對象,面向連接得server.bind(("127.0.0.1",9999)) #綁定主機名和端口號server.listen(10) #設(shè)置最大連接數(shù),超過后排隊clientsock,addr=server.accept() #建立與客戶端得連接,返回(socket object, address info)元組對象print("addr=%s %s"%(addr,type(addr)))print("客戶端ip地址為:%s 端口號為:%s"%addr)clientsock.send("歡迎來到服務(wù)端".encode('utf-8')) #python3要求發(fā)送byte型得數(shù)據(jù),所以我們將它以utf-8得形式轉(zhuǎn)換為bytes類型得msg=clientsock.recv(1024) #接收客戶端發(fā)來得消息,msg2為bytes類型得數(shù)據(jù)print(msg.decode('utf-8')) #我們將bytes類型數(shù)據(jù)轉(zhuǎn)換成str字符型得數(shù)據(jù),以utf-8得形式clientsock.close()

    客戶端(client.py)

    import socketclient=socket.socket(socket.AF_INET,socket.SOCK_STREAM)client.connect(("127.0.0.1",9999)) #connect函數(shù)接收元組型數(shù)據(jù)msg=client.recv(1024) #接收從服務(wù)器發(fā)來得消息,為bytes類型得數(shù)據(jù),大小為1024字節(jié)得緩沖區(qū)print(msg.decode('utf-8')) #我們轉(zhuǎn)化為str字符串類型得數(shù)據(jù),以utf-8得形式client.send("客戶端到此一游".encode('utf-8')) #python3要求發(fā)送bytes類型得數(shù)據(jù),所以我們得將它轉(zhuǎn)換client.close()

    Python中得socket網(wǎng)絡(luò)模塊_數(shù)據(jù)

    Python中得socket網(wǎng)絡(luò)模塊_套接字_02

    socket中得一些常用方法

    import socketa=socket.gethostname() #獲得本機得主機名,返回str型數(shù)據(jù)print(a,type(a))b=socket.gethostbyname(a) #根據(jù)主機名獲取ip地址,返回str型數(shù)據(jù),也可以是網(wǎng)絡(luò)上得域名print(b,type(b))c=socket.gethostbyaddr(b) #通過ip獲得該主機得一些信息,返回tuple元組型數(shù)據(jù)print(c,type(c))#############################################Win-10 <class 'str'>192.168.56.1 <class 'str'>('bogon', [], ['192.168.56.1']) <class 'tuple'>

    Socket 對象(內(nèi)建)方法

    函數(shù)

    描述

    服務(wù)器端套接字

    s.bind()

    綁定地址(host,port)到套接字, 在AF_INET下,以元組(host,port)得形式表示地址。

    s.listen()

    開始TCP監(jiān)聽。backlog指定在拒絕連接之前,操作系統(tǒng)可以掛起得最大連接數(shù)量。該值至少為1,大部分應(yīng)用程序設(shè)為5就可以了。

    s.accept()

    被動接受TCP客戶端連接,(阻塞式)等待連接得到來

    客戶端套接字

    s.connect()

    主動初始化TCP服務(wù)器連接,。一般address得格式為元組(hostname,port),如果連接出錯,返回socket.error錯誤。

    s.connect_ex()

    connect()函數(shù)得擴展版本,出錯時返回出錯碼,而不是拋出異常

    公共用途得套接字函數(shù)

    s.recv()

    接收TCP數(shù)據(jù),數(shù)據(jù)以字符串形式返回,bufsize指定要接收得最大數(shù)據(jù)量。flag提供有關(guān)消息得其他信息,通常可以忽略。

    s.send()

    發(fā)送TCP數(shù)據(jù),將string中得數(shù)據(jù)發(fā)送到連接得套接字。返回值是要發(fā)送得字節(jié)數(shù)量,該數(shù)量可能小于string得字節(jié)大小。

    s.sendall()

    完整發(fā)送TCP數(shù)據(jù),完整發(fā)送TCP數(shù)據(jù)。將string中得數(shù)據(jù)發(fā)送到連接得套接字,但在返回之前會嘗試發(fā)送所有數(shù)據(jù)。成功返回None,失敗則拋出異常。

    s.recvfrom()

    接收UDP數(shù)據(jù),與recv()類似,但返回值是(data,address)。其中data是包含接收數(shù)據(jù)得字符串,address是發(fā)送數(shù)據(jù)得套接字地址。

    s.sendto()

    發(fā)送UDP數(shù)據(jù),將數(shù)據(jù)發(fā)送到套接字,address是形式為(ipaddr,port)得元組,指定遠程地址。返回值是發(fā)送得字節(jié)數(shù)。

    s.close()

    關(guān)閉套接字

    s.getpeername()

    返回連接套接字得遠程地址。返回值通常是元組(ipaddr,port)。

    s.getsockname()

    返回套接字自己得地址。通常是一個元組(ipaddr,port)

    s.setsockopt(level,optname,value)

    設(shè)置給定套接字選項得值。

    s.getsockopt(level,optname[.buflen])

    返回套接字選項得值。

    s.settimeout(timeout)

    設(shè)置套接字操作得超時期,timeout是一個浮點數(shù),單位是秒。值為None表示沒有超時期。一般,超時期應(yīng)該在剛創(chuàng)建套接字時設(shè)置,因為它們可能用于連接得操作(如connect())

    s.gettimeout()

    返回當前超時期得值,單位是秒,如果沒有設(shè)置超時期,則返回None。

    s.fileno()

    返回套接字得文件描述符。

    s.setblocking(flag)

    如果flag為0,則將套接字設(shè)為非阻塞模式,否則將套接字設(shè)為阻塞模式(默認值)。非阻塞模式下,如果調(diào)用recv()沒有發(fā)現(xiàn)任何數(shù)據(jù),或send()調(diào)用無法立即發(fā)送數(shù)據(jù),那么將引起socket.error異常。

    s.makefile()

    創(chuàng)建一個與該套接字相關(guān)連得文件

    Python Internet 模塊

    以下是 Python 網(wǎng)絡(luò)編程得一些重要模塊:

    協(xié)議

    功能用處

    端口號

    Python 模塊

    HTTP

    網(wǎng)頁訪問

    80

    httplib, urllib, xmlrpclib

    NNTP

    閱讀和張貼新聞內(nèi)容,俗稱為"帖子"

    119

    nntplib

    FTP

    文件傳輸

    20

    ftplib, urllib

    SMTP

    發(fā)送郵件

    25

    smtplib

    POP3

    接收郵件

    110

    poplib

    IMAP4

    獲取郵件

    143

    imaplib

    Telnet

    命令行

    23

    telnetlib

    Gopher

    信息查找

    70

    gopherlib, urllib

    到此這篇關(guān)于Python中得socket網(wǎng)絡(luò)模塊介紹得內(nèi)容就介紹到這了,更多相關(guān)Python socket內(nèi)容請搜索之家以前得內(nèi)容或繼續(xù)瀏覽下面得相關(guān)內(nèi)容希望大家以后多多支持之家!

    聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進行處理。
    發(fā)表評論
    更多 網(wǎng)友評論1 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 国内精品视频一区二区三区| 一区二区国产精品| 无码人妻视频一区二区三区| 又紧又大又爽精品一区二区| 国产视频福利一区| 色天使亚洲综合一区二区| 另类国产精品一区二区| 性色AV一区二区三区无码| 亚洲av永久无码一区二区三区| 久久精品亚洲一区二区三区浴池| 精品人妻码一区二区三区 | 女同一区二区在线观看| 国产精品亚洲一区二区麻豆| 精品少妇人妻AV一区二区| 老熟妇高潮一区二区三区| 日韩AV片无码一区二区不卡| 国产丝袜无码一区二区视频| 国产精品自在拍一区二区不卡| 日韩精品无码一区二区三区四区 | 亚洲综合无码一区二区| 精品无码日韩一区二区三区不卡| 人妻无码久久一区二区三区免费| 国产日本一区二区三区| 日韩美女在线观看一区| 免费一区二区无码视频在线播放 | 成人免费视频一区二区三区 | а天堂中文最新一区二区三区| 在线免费视频一区| 老熟妇高潮一区二区三区| 久久久精品一区二区三区| 久久精品亚洲一区二区| 亚洲AV成人精品一区二区三区| 人妻视频一区二区三区免费| 日韩高清一区二区三区不卡 | 成人日韩熟女高清视频一区| 日韩人妻一区二区三区免费| 精品无码综合一区二区三区| 中文字幕在线观看一区二区三区| 日产精品久久久一区二区| 国产精品成人99一区无码 | 精品久久一区二区三区|