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

python網絡編程學習筆記(一)

 更新時間:2014年06月09日 21:15:13   作者:  
這篇文章主要介紹了python網絡編程基礎知識,需要的朋友可以參考下

學習用書:《python 網絡編程基礎》作者John Goerzen

第一部分底層網絡學習

        Python提供了訪問底層操作系統Socket接口的全部方法,需要的時候這些接口可以提供靈活而強有力的功能。

(1)基本客戶端操作

        在《python 網絡編程基礎》一書中,作者列出了一個簡單的Python客戶端程序,具體如下:

復制代碼 代碼如下:

import socket,sys
port =70
host=sys.argv[1]

filename=sys.argv[2]

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))

s.sendall(filename+"\r\n")

while 1:
    buf=s.recv(2048)
    if not len(buf):
        break
    sys.stdout.write(buf)

該程序實現的是Gopher協議,實現從主機上請求相關文檔的功能。(Gopher是Internet上一個非常有名的信息查找系統,它將Internet上的文件組織成某種索引,很方便地將用戶從Internet的一處帶到另一處。在WWW出現之前,Gopher是Internet上最主要的信息檢索工具,Gopher站點也是最主要的站點。但在WWW出現后,Gopher失去了昔日的輝煌?,F在它基本很少被使用。)
       于是,我按照書上的語句進行了一下測試,在dos下運行python gopherclient.py quux.org。但是系統提示為

Traceback (most recent call last):
File "gopherclient.py", line 5, i
filename=sys.argv[2]
IndexError: list index out of range

看了一下,sys.argv只有兩個元素['gopherclient.py', 'quux.org/']所以filename=sys.argv[2]就超出下界了。可是為什么會出現這個原因呢?是書里面寫錯了嗎,因為我也是初學socket,不是很了解,所以我也是沒有找到原因,如果哪位大牛知道是什么原因,希望能給講解一下。

(2)基本服務器操作
        《python 網絡編程基礎》一書中同樣給出了一個簡單的服務器程序,具體如下:

復制代碼 代碼如下:

import socket
host=''
port=51423
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((host,port))
s.listen(1)

print "Server is running on port %d;press Ctrl-C to terminate." %port
while 1:
    clientsock,clientaddr=s.accept()
    clientfile=clientsock.makefile('rw',0)
    clientfile.write("welcome,"+str(clientaddr)+'\n')
    clientfile.write("Please enter a string:")
    line=clientfile.readline().strip()
    clientfile.write("You entered %d characters.\n" %len(line))
    clientfile.close()
    clientsock.close()

該程序運行后,提示“Server is running on port 51423:press Ctrl-C to terminate”。此時,通過另一臺機器telnet本機器的51423端口,如telnet 127.0.0.1:51423,此時會提示welcome 127.0.0.1 ****,please enter a string:。 然后輸入幾個字符后,會返回你輸入字符的個數。

這里就該程序進行一下分析:

1、首先導入socket模塊,給host和port賦值。
2、調用socket.socket()來建立一個socket賦值給s。socket.socket(domain, type, protocol).domain參數的值有AF_UNIX,AF_LOCAL,AF_INET,PF_UNIX,PF_LOCAL,PF_INET。這幾個值中AF_UNIX=AF_LOCAL, PF_UNIX=PF_LOCAL, AF_LOCAL=PF_LOCAL, AF_INET=PF_INET。一般來說,AF 表示ADDRESS FAMILY 地址族,PF 表示PROTOCOL FAMILY 協議族,但這兩個宏定義是一樣的,所以使用哪個都沒有關系。參數type指定socket的類型:SOCK_STREAM提供有序、可靠、雙向及基于連接的字節(jié)流。SOCK_DGRAM支持數據報。SOCK_SEQPACKET提供有序、可靠、雙向及基于連接的數據報通信。SOCK_RAW提供對原始網絡協議的訪問。SOCK_RDM提供可靠的數據報層,但是不保證有序性。protocol一般取0(為什么取0我也沒搞清楚,放在以后明白了再寫上吧)。
3、s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)。setsockopt()函數用于任意類型、任意狀態(tài)套接口的設置選項值。盡管在不同協議層上存在選項,但本函數僅定義了最高的“套接口”層次上的選項。選項影響套接口的操作,諸如加急數據是否在普通數據流中接收,廣播數據是否可以從套接口發(fā)送等等。 這個函數中,第一個參數為協議層參數,指明了希望訪問一個選項所在的協議棧。通常我們需要使用下面中的一個:
SOL_SOCKET來訪問套接口層選項
SOL_TCP來訪問TCP層選項
第二個參數是與第一個參數相對應的。第一個參數決定了協議層level,第二個參數決定了該協議層下選項組合。SOL_SOCKET的選項組合如下:
協議層 選項名字
SOL_SOCKET SO_REUSEADDR
SOL_SOCKET SO_KKEPALIVE
SOL_SOCKET SO_LINGER
SOL_SOCKET SO_BROADCAST
SOL_SOCKET SO_OOBINLINE
SOL_SOCKET SO_SNDBUF
SOL_SOCKET SO_RCVBUF
SOL_SOCKET SO_TYPE
SOL_SOCKET SO_ERROR
具體的一些組合用法可見:http://wenku.baidu.com/view/23013b7101f69e3143329402.html
第三個參數設為1,這里我也沒很明白其中的意思,我試著把1換成50,結果是一樣的。換成0也是可以的,沒發(fā)現什么區(qū)別。希望大牛們給指點一下。
4、s.bind((host,port))綁定主機端口。
5、s.listen(1):listen函數使用主動連接套接口變?yōu)楸贿B接套接口,使得一個進程可以接受其它進程的請求,從而成為一個服務器進程。在TCP服務器編程中l(wèi)isten函數把進程變?yōu)橐粋€服務器,并指定相應的套接字變?yōu)楸粍舆B接。這里的參數涉及到一些網絡的細節(jié)。在進程正理一個一個連接請求的時候,可能還存在其它的連接請求。因為TCP連接是一個過程,所以可能存在一種半連接的狀態(tài),有時由于同時嘗試連接的用戶過多,使得服務器進程無法快速地完成連接請求。如果這個情況出現了,服務器進程希望內核如何處理呢?內核會在自己的進程空間里維護一個隊列以跟蹤這些完成的連接但服務器進程還沒有接手處理或正在進行的連接,這樣的一個隊列內核不可能讓其任意大,所以必須有一個大小的上限。這個backlog告訴內核使用這個數值作為上限。毫無疑問,服務器進程不能隨便指定一個數值,內核有一個許可的范圍。這個范圍是實現相關的。很難有某種統一,一般這個值會小30以內。這里設定為1表示每次最多只有一個等候處理的連接。
6、while循環(huán)從accept()函數開始。程序會在連接了一個客戶端后關閉socket。當某個客戶端連接的時,accept返回兩個信息,一個新的連接客戶端socket和客戶端的ip地址、端口號。如在上面的例子中添加print語句輸出clientsock和clientaddr,你會發(fā)現clientsock為socket.socketobject,clientaddr=('客戶端Ip',端口)。后面的循環(huán)中使用了文件類對象,服務器接著顯示出一些介紹性信息,從客戶端讀一個字符串,顯示一個應答,最后關閉客戶端socket。

相關文章

  • PowerShell的基本使用方法

    PowerShell的基本使用方法

    本文主要介紹了PowerShell的基本使用方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • PyTorch中的padding(邊緣填充)操作方式

    PyTorch中的padding(邊緣填充)操作方式

    今天小編就為大家分享一篇PyTorch中的padding(邊緣填充)操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Pycharm+Flask零基礎項目搭建入門的實現

    Pycharm+Flask零基礎項目搭建入門的實現

    本文主要介紹了Pycharm+Flask零基礎項目搭建入門的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • pycharm 關掉syntax檢查操作

    pycharm 關掉syntax檢查操作

    這篇文章主要介紹了pycharm 關掉syntax檢查操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Idea安裝python顯示無SDK問題解決方案

    Idea安裝python顯示無SDK問題解決方案

    這篇文章主要介紹了Idea安裝python顯示無SDK問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Django與遺留的數據庫整合的方法指南

    Django與遺留的數據庫整合的方法指南

    這篇文章主要介紹了Django與遺留的數據庫整合的方法指南,Django是最具人氣的Python開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • Python中urllib與urllib2模塊的變化與使用詳解

    Python中urllib與urllib2模塊的變化與使用詳解

    urllib是python提供的一個用于操作URL的模塊,在python2.x中有URllib庫,也有Urllib2庫,在python3.x中Urllib2合并到了Urllib中,我們爬取網頁的時候需要經常使用到這個庫,需要的朋友可以參考下
    2023-05-05
  • Linux下遠程連接Jupyter+pyspark部署教程

    Linux下遠程連接Jupyter+pyspark部署教程

    這篇文章主要為大家詳細介紹了Linux下遠程連接Jupyter+pyspark部署教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 基于Python打造高效便捷的目錄結構生成器

    基于Python打造高效便捷的目錄結構生成器

    這篇文章主要為大家詳細介紹了如何使用Python開發(fā)一個目錄結構生成器,它不僅能夠幫助用戶高效地生成文件夾目錄結構,還具備了很多智能化的功能,感興趣的小伙伴可以了解下
    2025-04-04
  • python opencv人臉識別考勤系統的完整源碼

    python opencv人臉識別考勤系統的完整源碼

    這篇文章主要介紹了python opencv人臉識別考勤系統的完整源碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論

丰县| 绥中县| 武鸣县| 穆棱市| 荣昌县| 和硕县| 星座| 油尖旺区| 芷江| 呼和浩特市| 普兰县| 北碚区| 来凤县| 祁东县| 宣汉县| 萝北县| 鄯善县| 西乡县| 建阳市| 迁西县| 望城县| 同心县| 泗水县| 大洼县| 明星| 本溪市| 铜鼓县| 和硕县| 海南省| 九龙县| 中江县| 绵竹市| 河源市| 化州市| 察隅县| 彭水| 怀来县| 子长县| 遵化市| 富平县| 石门县|