首頁  >  文章  >  後端開發  >  python中socket網路程式設計的詳細介紹(附範例)

python中socket網路程式設計的詳細介紹(附範例)

不言
不言轉載
2018-10-13 16:34:493109瀏覽

這篇文章帶給大家的內容是關於python中socket網路程式設計的詳細介紹(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

網路通訊的三要素

  • #IP

通訊的時候,雙方必須知道對方的標識, 好比發郵件必須知道對方的郵件地址。網路上每台電腦的唯一識別就是IP位址, 類似 123.123.123.123 。

IP位址其實是32位元整數(稱為IPv4) , 以字串表示的IP位址,如192.168.0.1 實際上是把32位元整數以8位元分組後的數字表示, 目的是便於閱讀。
IPv6位址其實是128位元整數, 它是目前使用的IPv4的升級版, 以字串表示。類似 2001:0db8:85a3:0042:1000:8a2e:0370:7334 。
  • portport

在兩台電腦通訊時, 只發IP位址是不夠的, 因為同一台電腦上跑著多個網路程式。一個IP套件來了之後, 到底是交給瀏覽器還是QQ, 就需要連接埠號碼來區分。

每個網路程式都會向作業系統申請唯一的連接埠號, 這樣, 兩個進程在兩台電腦之間建立網路連線就需要各自的IP位址和各自的連接埠號碼。

  • TCP/UDP協定

#為了把全世界的所有不同類型的電腦都連接起來, 就必須規定一套全球通用的協定,大家把網路的協定簡稱TCP/IP協定

socket程式

Socket是網路程式設計的一個抽象概念。通常我們用一個Socket表示“打開了一個網絡鏈接”, 而打開一個Socket需要知道目標計算機的IP地址和端口號, 再指定協議類型即可。

import socket
# socket.gethostname()当不传入参数时,返回本机主机名
print(socket.gethostname()) #DESKTOP-EN0LQJH

#域名(英语:Domain Name),简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称
#通过域名查找服务器IP地址
print(socket.gethostbyname('www.baidu.com'))    #119.75.216.20

#通过一个IPv4的地址来获取主机信息
print(socket.gethostbyaddr('114.114.114.114'))

#通过IP/port组合,访问服务器信息
# 如果是AF_INET则格式为:(address, port),如果为AF_INET6,则返回(address, port, flow info, scope id)

print(socket.getaddrinfo('www.xunlei.com',80))

python中socket網路程式設計的詳細介紹(附範例)

用socket實作簡易的網頁伺服器

import socket
def reply_info(socketObj):
    # socketObj.send('ok')
    with open('hello.html') as f:
        socketObj.send(f.read().encode('utf-8'))
if __name__=="__main__":
    #1. 创建socket对象
    socket_server = socket.socket()
    #2. 绑定IP和端口
    socket_server.bind(('192.168.1.165',9999))
    print("服务器端已经启动9999端口......")
    #3. 监听是否有客户端连接
    socket_server.listen(5)

    while True:
        # 4. 接受客户端的连接
        socket_client,address = socket_server.accept()
        # 5. 接收客户端发来的信息
        data = socket_client.recv(1024)
        # 6. 与客户端进行交互, 返回给客户端信息
        reply_info(socket_server)
        socket_server.close()

以上是python中socket網路程式設計的詳細介紹(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除