一、服務端
1、創建socket對象
socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
AF_INET:IPv4協議
SOCK_STREAM: 字節流套接字
返回值:非負整數,記為套接字表述符
2、socket綁定地址
socket.bind((host,port))
把一個本地協議地址賦予一個套接字,這個地址不能是已被其他的socket綁定了的。
3、監聽
socket.listen(5)
使得socket可以接受連接。設置最大連接數為5,這個數值可以自行設置,最小值為0
4、接受連接
conn,addr=socket.accept()
接受一個連接,socket必須已經綁定了一個地址,並且正在監聽連接。
返回值是(conn,address),其中conn是一個新的socket對象,用於在這個連接上收發數據。address是綁定在這個socket連接的另一端的地址。
5、接收數據
conn.recv(bufsize)
從socket中接受數據,返回值接收的數據,數據類型是bytes對象。一次性接收到的最大數據量為bufsize。在網絡或者硬件不夠好的情況下,收到的數據量可能小於bufsize。
6、發送數據
conn.send(bytes)
發送數據到已連接到遠程地址的socket。返回值是已發送的字節數。返回值可能小於需要發送的字節數。應用程序負責將所有的數據發送出去,如果有些數據沒有被發送,應用程序需要把剩余的數據再次發送出去。
conn.sendall(bytes)
接口負責將數據全部發送到遠程地址的socket上。如果成功返回None,失敗則拋出異常。
二、客戶端
1、創建socket對象
socket.socket(socket.AF_INET.socket.SOCK_STEAM)
與服務端創建socket對象相同
2、socket.connect((host,port))
通過地址連接到遠程的socket
3、接收數據
socket.recv()
同服務端的recv()
4、發送數據
socket.send()
同服務端的send()
socket.sendall()
同服務端的sendall()
