摘要:在任何類型的通信開始之前,網(wǎng)絡(luò)應(yīng)用程序必須創(chuàng)建套接字。基于文件的套接字,家族名又名基于網(wǎng)絡(luò)的套接字,家族名在和后續(xù)的版本中,支持的套接字有,,,。中的網(wǎng)絡(luò)編程在中主要是用模塊來實(shí)現(xiàn)基于套接字的網(wǎng)絡(luò)通信。
python學(xué)習(xí)記錄--網(wǎng)絡(luò)編程1、套接字介紹
一臺(tái)機(jī)器上的不同進(jìn)程之間進(jìn)行通信可以利用隊(duì)列,管道等,但是不同機(jī)器之間的進(jìn)程進(jìn)行通信用隊(duì)列是不行的,解決這個(gè)問題就是網(wǎng)絡(luò)套接字。
套接字是計(jì)算機(jī)網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu),它體現(xiàn)了通信端點(diǎn)的概念。在任何類型的通信開始之前,網(wǎng)絡(luò)應(yīng)用程序必須創(chuàng)建套接字。可以將它比作電話插孔,沒有它無法進(jìn)行通信。
套接字最初是為同一主機(jī)上的應(yīng)用程序所創(chuàng)建,使得主機(jī)上一個(gè)程序(進(jìn)程)可以和主機(jī)上另外一個(gè)程序互相通信,也就是所謂的進(jìn)程間通信。有兩種類型的套接字:基于文件和基于網(wǎng)絡(luò)的。
基于文件的套接字,家族名:AF_UNIX(又名:AF_LOCAL)
基于網(wǎng)絡(luò)的套接字,家族名:AF_INET
在python2.5和后續(xù)的版本中,支持的套接字有:AF_UNIX,AF_INET,AF_TICP,AF_NETLINK。python中的網(wǎng)絡(luò)編程主要是AF_INET。
1.1、套接字地址:主機(jī)+端口
如果一個(gè)套接字像一個(gè)電話插孔——允許通信的一些基礎(chǔ)設(shè)施,那么主機(jī)名和端口號(hào)就像區(qū)號(hào)和電話號(hào)碼的組合。
有效的端口號(hào)范圍為 0~65535(小于 1024 的端口號(hào)預(yù)留給了系統(tǒng))。
1.2、面向連接和無連接的套接字
python中創(chuàng)建面向連接(TCP協(xié)議)的套接字必須使用SOCK_STREAM作為套接字類型,而創(chuàng)建無連接(UDP協(xié)議)的套接字必須使用SOCK_DGRAM作為套接字類型。
在python中主要是用socket模塊來實(shí)現(xiàn)基于套接字的網(wǎng)絡(luò)通信。
2.1、socket()模塊函數(shù)
使用socket.socket()函數(shù)創(chuàng)建套接字,一般語法格式如下:
import socket socket(socket_family,socket_type,protocol=0) #其中,socket_family就是AF_UNIX或者AF_INET等, #socker_type是SOCK_DGRAM或者SOCK_STREAM, #protocol通常省略,默認(rèn)為0
創(chuàng)建一個(gè)TCP/IP套接字,可以用下面方式調(diào)用socket.socket()。
tcpSocket = socket.socket(socket.AF_INET,socket.SCOK_STREAM)
創(chuàng)建一個(gè)UDP/IP套接字,可以用下面方式調(diào)用socket.socket()。
udpSock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
如果用"from socket import *"導(dǎo)入模塊的話,創(chuàng)建套接字就可以節(jié)省很多代碼,例如創(chuàng)建一個(gè)UDP/IP套接字。
from socket import * udpSock = socket(AF_INET,SOCK_DGRAM)
有了套接字對象,就可以使用套接字對象方法進(jìn)行交互。
2.2、套接字方法
常見的套接字方法:
方法名 | 描述 | |
---|---|---|
s.send() | 發(fā)送TCP消息 | |
s.sendto() | 發(fā)送UDP消息 | |
s.recv() | 接收TCP消息 | |
s.recvfrom() | 接收UDP消息 | |
s.close() | 關(guān)閉套接字 | |
s.bind() | 將地址(主機(jī)名+端口號(hào)對)綁定到套接字上 |
3.1 UDP協(xié)議
UDP協(xié)議--是一個(gè)簡單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議,它不提供可靠性,它把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)出去,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快。
UDP是一種面向無連接的協(xié)議,每個(gè)數(shù)據(jù)報(bào)都是一個(gè)獨(dú)立的信息,包括完整的源地址或目的地址,它在網(wǎng)絡(luò)上以任何可能的路徑傳往目的地,因此能否到達(dá)目的地,到達(dá)目的地的時(shí)間以及內(nèi)容的正確性都是不能被保證的。
3.2 UDP特點(diǎn)
UDP是面向無連接的通訊協(xié)議,UDP數(shù)據(jù)包括目的端口號(hào)和源端口號(hào)信息,由于通訊不需要連接,所以可以實(shí)現(xiàn)廣播發(fā)送。 UDP傳輸數(shù)據(jù)時(shí)有大小限制,每個(gè)被傳輸?shù)臄?shù)據(jù)報(bào)必須限定在64KB之內(nèi)。 UDP是一個(gè)不可靠的協(xié)議,發(fā)送方所發(fā)送的數(shù)據(jù)報(bào)并不一定以相同的次序到達(dá)接收方。
【適用情況】
UDP是面向消息的協(xié)議,通信時(shí)不需要建立連接,數(shù)據(jù)的傳輸自然是不可靠的,UDP一般用于多點(diǎn)通信和實(shí)時(shí)的數(shù)據(jù)業(yè)務(wù),比如
語音廣播
視頻
TFTP(簡單文件傳送)
SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)
RIP(路由信息協(xié)議,如報(bào)告股票市場,航空信息)
DNS(域名解釋)
注重速度流暢
UDP操作簡單,而且僅需要較少的監(jiān)護(hù),因此通常用于局域網(wǎng)高可靠性的分散系統(tǒng)中client/server應(yīng)用程序。例如視頻會(huì)議系統(tǒng),并不要求音頻視頻數(shù)據(jù)絕對的正確,只要保證連貫性就可以了,這種情況下顯然使用UDP會(huì)更合理一些。
3.3 創(chuàng)建UDP服務(wù)器
創(chuàng)建UDP服務(wù)器的大體框架,由于UDP是面向無連接的,所以除了等待傳入的連接之外,幾乎不需要做其他工作。
from socket import * #創(chuàng)建服務(wù)器套接字 udpSocket = socket.socket(AF_INET,SOCK.DGRAM) #綁定服務(wù)器套接字 udpSocket.bind(port) #服務(wù)器無限循環(huán),等待連接 while True: #接受客戶端傳入/發(fā)送數(shù)據(jù) cs = udpSocket.recvfrom()/udpSocket.sendto(xxx) #關(guān)閉套接字 udpSocket.close()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42960.html
摘要:屬于前一種,而且日益被用于數(shù)學(xué)計(jì)算機(jī)器學(xué)習(xí)和多種數(shù)據(jù)科學(xué)應(yīng)用。近來,由于擁有多個(gè)針對機(jī)器學(xué)習(xí)自然語言處理數(shù)據(jù)視覺化數(shù)據(jù)探索數(shù)據(jù)分析和數(shù)據(jù)挖掘的插件,豐富的數(shù)據(jù)科學(xué)生態(tài)體系得到了較大的發(fā)展,甚至有將數(shù)據(jù)科學(xué)社區(qū)化的趨勢。 譯者注:本文的英文原文地址是:Python for Data Science vs Python for Web Development,發(fā)布時(shí)間是10月29日。譯者一...
摘要:本文與大家分享一些編程語言的入門書籍,其中不乏經(jīng)典。全書貫穿的主體是如何思考設(shè)計(jì)開發(fā)的方法,而具體的編程語言,只是提供一個(gè)具體場景方便介紹的媒介。入門入門容易理解而且讀起來幽默風(fēng)趣,對于編程初學(xué)者和語言新手而言是理想的書籍。 本文與大家分享一些Python編程語言的入門書籍,其中不乏經(jīng)典。我在這里分享的,大部分是這些書的英文版,如果有中文版的我也加上了。有關(guān)書籍的介紹,大部分截取自是官...
摘要:正好,最近又有幾位不同身份的初學(xué)者來咨詢,要我推薦幾本入門書籍,而我們薦書系列已經(jīng)停更了兩個(gè)多月,所以,本期薦書就來推薦一些入門書籍吧。為了準(zhǔn)備這期薦書,我專門搜集了本入門書籍,現(xiàn)在全部加入到了一份豆瓣豆列里,方便大家查看。 showImg(https://segmentfault.com/img/remote/1460000019299066?w=4790&h=3193); 本文原創(chuàng)...
摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲學(xué)習(xí)系列教程(來源于某博主:htt...
閱讀 1980·2021-11-25 09:43
閱讀 664·2021-10-11 10:58
閱讀 1737·2019-08-30 15:55
閱讀 1735·2019-08-30 13:13
閱讀 746·2019-08-29 17:01
閱讀 1848·2019-08-29 15:30
閱讀 804·2019-08-29 13:49
閱讀 2181·2019-08-29 12:13