socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信
在應用中,要寫兩個程序來通信,一個是服務器端程序,一個是客戶端程序
服務器端程序:
import socket # 建立一個服務端 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#創建一個socket server.bind(('localhost',9090)) #將socket綁定到監聽的端口 server.listen(5) #開始監聽 5表示可以使用五個鏈接排隊 conn,addr = server.accept() #等待鏈接,conn是建立連接后,獲取的連接socket,我們可以用來發送和接受消息, # 為什么不用上邊的那個socket呢,因為上邊的那個socket沒有連接另一端的地址的信息, # 所以只有接收到消息后,才能建立當前的這個socket;addr就是客戶服務器地址信息 data = conn.recv(1024) #接收數據,data是byte類型 print('recive:',data.decode()) #打印接收到的數據 conn.sendall('收到請求'.encode('utf-8'))#發送數據
客戶端程序
import socket# 客戶端 發送一個數據,再接收一個數據 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #聲明socket類型,同時生成鏈接對象 #client.bind(('localhost',9091)) #綁定要監聽的端口,這一步可以不需要,如果綁定了, # 那么客戶服務器就會用這個固定的端口發送消息,如果沒綁定,端口就是隨機的用 client.connect(('127.0.0.1',9090)) #建立一個鏈接,連接到本地的9090端口 msg = "來自請求服務器的--請求" client.send(msg.encode('utf-8')) #發送一條信息 python3 只接收btye流 data = client.recv(1024) #接收一個信息,並指定接收的大小 為1024字節 print('recv:',data.decode()) #輸出接收到的信息
python 文檔:https://docs.python.org/3/library/socket.html#socket-objects