python大佬養成計劃----socket網絡編程

網絡通訊的三要素

  • IP

通訊的時候, 雙方必須知道對方的標識, 比如發郵件必須知道對方的郵件地址。 互聯網上每一個計算機的惟一標識就是IP地址, 相似 123.123.123.123 。html

IP地址其實是一個32位整數(稱爲IPv4) , 以字符串表示的IP地址,如 192.168.0.1 其實是把32位整數按8位分組後的數字表示, 目的是便於閱讀。

IPv6地址其實是一個128位整數, 它是目前使用的IPv4的升級版, 以字符串表示。相似於 2001:0db8:85a3:0042:1000:8a2e:0370:7334 。
  • 端口port

在兩臺計算機通訊時, 只發IP地址是不夠的, 由於同一臺計算機上跑着多個網絡程序。 一個IP包來了以後, 究竟是交給瀏覽器仍是QQ, 就須要端口號來區分。web

每一個網絡程序都向操做系統申請惟一的端口號, 這樣, 兩個進程在兩臺計算機之間創建網絡鏈接就須要各自的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))

圖片描述

用socket實現簡易的web服務器

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()

圖事後貼上服務器

相關文章
相關標籤/搜索