通訊的時候, 雙方必須知道對方的標識, 比如發郵件必須知道對方的郵件地址。 互聯網上每一個計算機的惟一標識就是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 。
在兩臺計算機通訊時, 只發IP地址是不夠的, 由於同一臺計算機上跑着多個網絡程序。 一個IP包來了以後, 究竟是交給瀏覽器仍是QQ, 就須要端口號來區分。web
每一個網絡程序都向操做系統申請惟一的端口號, 這樣, 兩個進程在兩臺計算機之間創建網絡鏈接就須要各自的IP地址和各自的端口號。
爲了把全世界的全部不一樣類型的計算機都鏈接起來, 就必須規定一套全球通用的協議,你們把互聯網的協議簡稱TCP/IP協議編程
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))
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()
圖事後貼上服務器