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

python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(二):socket建立網(wǎng)絡(luò)客戶端

 更新時間:2014年06月09日 21:40:13   作者:  
看了這一節(jié),突然之間對python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(1)中的一些不理解的問題有了認(rèn)識,至少明白了socket是怎么回事。這里關(guān)于socket的起源等問題就不做筆記記錄了,直接進入主題

1、建立socket

建立socket對象需要搞清通信類型和協(xié)議家族。通信類型指明了用什么協(xié)議來傳輸數(shù)據(jù)。協(xié)議的例子包括IPv4、IPv6、IPX\SPX、AFP。對于internet通信,通信類型基本上都是AF_INET(和IPv4對應(yīng))。協(xié)議家族一般表示TCP通信的SOCK_STREAM或者表示UDP通信的SOCK_DGRAM。因此對于TCP通信,建立一個socket連接的語句為:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
對于UDP通信,建立一個socket連接的語句為:
s=socket.socket(socket.AF_INET,SOCK_DGRAM)

2、連接socket

連接socket需要提供一個tuple,包括host(主機名或者IP)和port(遠(yuǎn)程端口),類似代碼為:
s.connect(("www.baidu.com",80)

3、尋找端口號

socket庫中利用getservbyname()函數(shù)可以查詢端口號,一般需要兩個參數(shù):一是協(xié)議名,如http、smtp、pop3等,一個是端口名,如tcp、udp

例如:

import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
port=socket.getservbyname('http','tcp')
port的返回值為80。若改為:
port=socket.getservbyname('smtp','tcp')
port的返回值為25。

4、從socket獲取信息

建立socket連接后,可以通過getsockname()獲取本身的ip地址和端口號,也可以通過getpeername()顯示遠(yuǎn)程機器的ip地址和端口號。
如:在python shell中

>>> import socket
>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
>>> port=socket.getservbyname('http','tcp')
>>> s.connect(('www.baidu.com',port))
>>> print s.getsockname()
('192.168.87.138', 3213)
>>> print s.getpeername()
('220.181.111.147', 80)

Socket 模塊的類方法
類方法 說明
Socket 低層網(wǎng)絡(luò)接口(每個 BSD API)
socket.socket(family, type) 創(chuàng)建并返回一個新的 socket 對象
socket.getfqdn(name) 將使用點號分隔的 IP 地址字符串轉(zhuǎn)換成一個完整的域名
socket.gethostbyname(hostname) 將主機名解析為一個使用點號分隔的 IP 地址字符串
socket.fromfd(fd, family, type) 從現(xiàn)有的文件描述符創(chuàng)建一個 socket 對象

Socket 模塊的實例方法

實例方法 說明
sock.bind( (adrs, port) ) 將 socket 綁定到一個地址和端口上
sock.accept() 返回一個客戶機 socket(帶有客戶機端的地址信息)
sock.listen(backlog) 將 socket 設(shè)置成監(jiān)聽模式,能夠監(jiān)聽 backlog 外來的連接請求
sock.connect( (adrs, port) ) 將 socket 連接到定義的主機和端口上
sock.recv( buflen[, flags] ) 從 socket 中接收數(shù)據(jù),最多 buflen 個字符
sock.recvfrom( buflen[, flags] ) 從 socket 中接收數(shù)據(jù),最多 buflen 個字符,同時返回數(shù)據(jù)來源的遠(yuǎn)程主機和端口號
sock.send( data[, flags] ) 通過 socket 發(fā)送數(shù)據(jù)
sock.sendto( data[, flags], addr ) 通過 socket 發(fā)送數(shù)據(jù)
sock.close() 關(guān)閉 socket
sock.getsockopt( lvl, optname ) 獲得指定 socket 選項的值
sock.setsockopt( lvl, optname, val ) 設(shè)置指定 socket 選項的值

舉例:
>>> import socket
>>> socket.gethostbyname('www.baidu.com')
'220.181.111.147'
>>> socket.gethostbyname('www.126.com')
'123.125.50.22'
>>> socket.getfqdn('123.125.50.22')
'123.125.50.22'
這里getfqdn卻不能返回域名?

5、處理錯誤
關(guān)于錯誤異常的處理,主要就是用try、except語句。如將python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(1)中g(shù)opherclient.py進行一下修改:

復(fù)制代碼 代碼如下:

# -*- coding: cp936 -*-
##modify by 小五義
import socket,sys
port =70
host=sys.argv[1]

filename=sys.argv[2]

try:
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
except Socket.error,e:
    print "建立socket錯誤:%s"%e

try:
    s.connect((host,port))
except socket.gaierror,e:
    print "host或者端口錯誤:%s" %e
except socket.error,e:
    print "連接錯誤:%s" %e

try:
    s.sendall(filename+"\r\n")
except socket.error,e:
    print "數(shù)據(jù)發(fā)送錯誤:%s" %e
    sys.exit(1)


while 1:
    try:
        buf=s.recv(2048)
    except socket.error,e:
        print "接收錯誤:%s"%e
        sys.exit(1)
    if 'does not exist' in buf:
        print "%s文件不存在" %filename
    else:
        if not len(buf):
            break
        sys.stdout.write(buf)

運行結(jié)果是:

C:\>python gopherclient.py quux.org/ wh.txt
連接錯誤:[Errno 10060]
數(shù)據(jù)發(fā)送錯誤:[Errno 10057] 由于套接字沒有連接并且(當(dāng)
據(jù)報套接字時)

C:\>python gopherclient.py quux.org wh.txt
wh.txt文件不存在

=======================================================================================================================
對python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(1)的添加
筆記1中在dos下運行python gopherclient.py quux.org系統(tǒng)提示出錯的問題,終于明白了。錯誤原因是少了文件名。如在quux.org/有whatsnew.txt,于是在dos下運行python gopherclient.py quux.org whatsnew.txt。這時會將whatsnew.txt的內(nèi)容全部列出。

相關(guān)文章

  • 感知器基礎(chǔ)原理及python實現(xiàn)過程詳解

    感知器基礎(chǔ)原理及python實現(xiàn)過程詳解

    這篇文章主要介紹了感知器基礎(chǔ)原理及python實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python爬蟲 批量下載zabbix文檔代碼實例

    python爬蟲 批量下載zabbix文檔代碼實例

    這篇文章主要介紹了python爬蟲 批量下載zabbix文檔代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • python爬蟲常見錯誤集合

    python爬蟲常見錯誤集合

    這篇文章主要介紹了python爬蟲常見錯誤,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 使用Python實現(xiàn)Excel表格轉(zhuǎn)圖片

    使用Python實現(xiàn)Excel表格轉(zhuǎn)圖片

    在數(shù)據(jù)處理與信息分享過程中,Excel表格作為一種強大的數(shù)據(jù)管理工具被廣泛應(yīng)用,這篇文章主要為大家詳細(xì)介紹了如何使用Python將Excel表格轉(zhuǎn)換為圖片,需要的可以參考下
    2024-04-04
  • 零基礎(chǔ)學(xué)Python(一)Python環(huán)境安裝

    零基礎(chǔ)學(xué)Python(一)Python環(huán)境安裝

    本文是此系列的第一篇,所以開始先胡扯一番,然后再分別介紹LINUX系統(tǒng),windows系統(tǒng),MAC系統(tǒng)下如何安裝Python環(huán)境,希望對大家有所幫助
    2014-08-08
  • Python竟然能剪輯視頻

    Python竟然能剪輯視頻

    平時我們在刷短視頻或者看到一些視頻的時候,希望可以把視頻里面的音頻提取出來當(dāng)背景音樂究竟是怎么操作的呢,下面小編教大家python如何去提取一個視頻里面的音頻,感興趣的朋友一起看看吧
    2021-05-05
  • YOLOv8訓(xùn)練自己的數(shù)據(jù)集(詳細(xì)教程)

    YOLOv8訓(xùn)練自己的數(shù)據(jù)集(詳細(xì)教程)

    YOLO是一種基于圖像全局信息進行預(yù)測的目標(biāo)檢測系統(tǒng),YOLOv8 是ultralytics公司在2023年1月10號開源的YOLOv5的下一個重大更新版本,這篇文章主要給大家介紹了關(guān)于YOLOv8訓(xùn)練自己的數(shù)據(jù)集的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 對于Python中RawString的理解介紹

    對于Python中RawString的理解介紹

    下面小編就為大家?guī)硪黄獙τ赑ython中RawString的理解介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 詳解PyCharm使用pyQT5進行GUI開發(fā)的基本流程

    詳解PyCharm使用pyQT5進行GUI開發(fā)的基本流程

    本文主要介紹了PyCharm使用pyQT5進行GUI開發(fā)的基本流程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Python自動化之定位方法大殺器xpath

    Python自動化之定位方法大殺器xpath

    selenium的幾種定位方法中,大殺器之一就是xpath方法,學(xué)會它,你將無所不能.本文就帶大家詳細(xì)了解一下這個大殺器,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-05-05

最新評論

灵台县| 淳化县| 黄山市| 泰兴市| 阜宁县| 楚雄市| 察隅县| 泰来县| 宜昌市| 莒南县| 兰考县| 孟州市| 民和| 谢通门县| 文登市| 项城市| 汪清县| 新晃| 怀仁县| 抚远县| 昌平区| 丹寨县| 九寨沟县| 闸北区| 彝良县| 卢湾区| 靖西县| 游戏| 瑞安市| 礼泉县| 盐津县| 邹城市| 蛟河市| 上犹县| 囊谦县| 宜城市| 德化县| 鹤峰县| 博野县| 外汇| 彝良县|