最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python套接字socket通信

 更新時間:2022年04月01日 09:55:12   作者:微小冷  
這篇文章主要介紹了python套接字socket通信,python標準庫中內(nèi)置了底層網(wǎng)絡接口socket,以下代碼均默認from?socket?import?*,下文很多詳細內(nèi)容需要的小伙伴可以參考一下

一、初步認識

socket被翻譯成套接字,盡管有些人詬病,但我覺得還挺貼切的。其功能是提供低級別的網(wǎng)絡服務,最常用的就是根據(jù)IP來傳輸數(shù)據(jù)。

所謂傳輸,就要有兩個“端”,首先做一個服務端

import socket
s = socket.socket()
host = socket.gethostname() #本機地址 ??
port = 12345 ? ? ? ? ? ? ? ?#端口
s.bind((host,port)) ? ? ? ? #綁定端口
s.listen(3) ? ? #開始監(jiān)聽,最多支持三個鏈接
while True:
? ? c, addr = s.accept() ? ?#等待連接
? ? print("Linked @ Addr",addr)
? ? break

#下面為發(fā)送命令
while True:
? ? data = input("input data:")
? ? c.send(data.encode("utf8"))
? ? if data=="exit":
? ? ? ? c.close()
? ? ? ? break

需要注意的是,send需要發(fā)送的內(nèi)容是二進制碼,故而通過encodedecode來編解碼。最后如果輸入exit則退出。

然后寫一個客戶端

import socket
s = socket.socket()
host = socket.gethostname()
port = 12345
s.connect((host,port))
while True:
? ? data = s.recv(1024).decode("utf8")
? ? if data!=b'':
? ? ? ? print("receive data:", data)
? ? # 當接收到exit時關閉端口,退出循環(huán)
? ? if data[:4]=="exit":
? ? ? ? s.close()
? ? ? ? break

運行之后,服務端和客戶端的輸入輸出分別為

#服務端
Linked @ Addr ('192.168.1.113', 9953)
input data:hello world
11
input data:who are you
11
input data:can u speak chinese?
20
input data:exit

#客戶端
receive data: hello world
receive data: who are you
receive data: can u speak chinese?
receive data: exit

二、socket對象

在上例中,通過socket.socket創(chuàng)建了一個socket對象,其完整的構(gòu)造函數(shù)為

socket.socket(family=AF_INET, type=SOCK_STREAM,proto=0,fileno=None)

其中,family表示套接字的地址族,主要包括三類

地址族AF_INETAF_INET6AF_UNIX
協(xié)議來源IPv4IPv6UNIX

在創(chuàng)建串口時,可以通過或運算|同時選擇多個地址族。

type為套接字類型,比較常用的有兩種:

  • SOCK_STREAM,為流式套接字,特點是傳輸與接收順序相同,安全。
  • SOCK_DGRAM,為數(shù)據(jù)報格式套接字,特點是快、無順序、可能丟失

proto為協(xié)議號,一般為0,當協(xié)議族為AF_CAN時,協(xié)議應為CAN_RAW, CAN_BCM, CAN_ISOTPCAN_J1939。

fileno代表一個創(chuàng)建socket的文件。

盡管構(gòu)造函數(shù)并無聲明客戶端與服務端的參數(shù),但從功能來看,二者所能夠調(diào)用的成員應該并不完全相同。

其中,bind,listen,accept這三個方法為服務端的專有方法,其功能分別為

  • bind(address):將其綁定到某個地址,其中地址address一般為一個元組,包括IP和端口號
  • listen(N):啟動一個服務器用于接受連接,N為最多連接個數(shù),不小于0。
  • accept():接受一個連接,無參數(shù),返回值是(conn, address)元組,conn是一個新的socket對象,用于收發(fā)數(shù)據(jù)。

相應地,客戶端也有兩個專用的方法:

  • connect(address):連接某個地址。
  • connect_ex(address):和connect相比,當出現(xiàn)錯誤時返回錯誤碼,而不報錯。

接下來是客戶端和服務端均可使用的方法,其中最關鍵的就是發(fā)送send和接收recv。

其中,與發(fā)送相關的函數(shù)有:

  • send(bytes):其中bytes為發(fā)送字節(jié),返回已發(fā)送的字節(jié)(有的時候可能并沒有發(fā)完)。
  • sendall(bytes):和send相比,會持續(xù)發(fā)送bytes,直到所有數(shù)據(jù)都已發(fā)送或者報錯。
  • sendfile(file,offset=0,count=None):在Unix下發(fā)送文件,在Windows下和send相同,相當于是不可用的。
  • sendto(bytes,addresss):指定地址發(fā)送數(shù)據(jù)。

在Windows中可用的接收相關函數(shù)有兩組,其中bufsize表示接收數(shù)據(jù)的最大字節(jié)數(shù)。

 返回數(shù)據(jù)返回數(shù)據(jù)+接收端地址
不寫入緩沖區(qū)recv(bufsize)recvfrom(bufsize)
寫入緩沖區(qū)bufrecv_into(buf,bufsize)recvfrom_into(buf,bufsize)

get-set是很多模塊中都會出現(xiàn)的函數(shù)名稱,前者代表獲取某種參數(shù),后者代表設置某些參數(shù),一般后者的輸入為前者的輸出。

套接字中止或者關閉的方法有下面幾種:

  • close()關閉套接字的文件描述符
  • detach()關閉套接字對象,但并不關閉文件描述符

shutdown(how)可以部分關閉套接字的連接,其中how為:

  • SHUT_RD:后續(xù)不再允許接收
  • SHUT_WR:后續(xù)不再允許發(fā)送
  • SHUT_RDWR:后續(xù)的發(fā)送和接收都不允許

 到此這篇關于python套接字socket通信的文章就介紹到這了,更多相關python  socket通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python opencv設置攝像頭分辨率以及各個參數(shù)的方法

    python opencv設置攝像頭分辨率以及各個參數(shù)的方法

    下面小編就為大家分享一篇python opencv設置攝像頭分辨率以及各個參數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python中通過預先編譯正則表達式提高效率

    python中通過預先編譯正則表達式提高效率

    Python是一個很酷的語言,因為你可以在很短的時間內(nèi)利用很少的代碼做很多事情,再加上正則表達式就更能體現(xiàn)其效果,下面這篇文章主要給大家介紹了關于python中通過預先編譯正則表達式提高效率的相關資料,需要的朋友可以參考下。
    2017-09-09
  • python中設置超時跳過,超時退出的方式

    python中設置超時跳過,超時退出的方式

    今天小編就為大家分享一篇python中設置超時跳過,超時退出的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 利用python發(fā)送和接收郵件

    利用python發(fā)送和接收郵件

    這篇文章主要為大家詳細介紹了如何利用python發(fā)送和接收郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • python實現(xiàn)將內(nèi)容分行輸出

    python實現(xiàn)將內(nèi)容分行輸出

    本文給大家分享的是使用python實現(xiàn)將一行里的內(nèi)容進行分行輸出,一共給出了四種方法,小伙伴們可以參考下
    2015-11-11
  • python控制臺實現(xiàn)tab補全和清屏的例子

    python控制臺實現(xiàn)tab補全和清屏的例子

    今天小編就為大家分享一篇python控制臺實現(xiàn)tab補全和清屏的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python之如何調(diào)整圖片的文件大小

    Python之如何調(diào)整圖片的文件大小

    這篇文章主要介紹了Python之如何調(diào)整圖片的文件大小問題,具有很好的參考價值,希望對大家有所幫助。
    2023-03-03
  • Python Pygame實戰(zhàn)之趣味籃球游戲的實現(xiàn)

    Python Pygame實戰(zhàn)之趣味籃球游戲的實現(xiàn)

    這篇文章主要為大家分享了一個基于Python和Pygame實現(xiàn)的一個趣味籃球游戲,文中的示例代碼講解詳細,對我們學習Python有一定幫助,需要的可以參考一下
    2022-04-04
  • 一文帶你了解Python中的雙下方法

    一文帶你了解Python中的雙下方法

    Python中有一些特殊方法的方法名都是以雙下劃線開始和結(jié)束,所以又被稱為雙下方法。本文就來為大家詳細講講Python中的雙下方法的使用,感興趣的可以了解一下
    2022-07-07
  • Python3爬蟲里關于代理的設置總結(jié)

    Python3爬蟲里關于代理的設置總結(jié)

    在本篇文章里小編給大家整理的是一篇關于Python3爬蟲里關于代理的設置總結(jié),需要的朋友們可以參考下。
    2020-07-07

最新評論

赣榆县| 黔西| 满洲里市| 电白县| 鄯善县| 汶川县| 漾濞| 宜章县| 章丘市| 桓仁| 鄯善县| 辽阳县| 云南省| 浠水县| 临邑县| 土默特右旗| 汝州市| 穆棱市| 即墨市| 天台县| 隆昌县| 平罗县| 五大连池市| 屏边| 边坝县| 寻甸| 贵阳市| 博客| 阿拉尔市| 东兴市| 沅江市| 芦山县| 大理市| 施甸县| 丘北县| 桦甸市| 阿拉善右旗| 昂仁县| 马山县| 太仓市| 左贡县|