python 簡單的socket應用(針對TCP)
***作者:ColorfulVox
出處:https://mp.csdn.net/mdeditor/82793525#
原創文章,轉載請註明作者和出處***
可以總結為以下五個步驟:
1.建立socket套接字 2.繫結ip和port 3.listen使套接字變為被動連線 4.accept等待客戶端連線 5.recv/send接受和傳送資料
server部分
先做一些準備工作:
import socket
server = socket.socket(family,type):建立連線 family:協議族,絕大多數情況使用預設的socket.AF_INET type:tcp使用socket.SOCK_STREAM,udp使用socket.SOCK_DGRAM
server.bind(address):將建立的連線繫結到某個地址 address:引數為ip地址和埠號的元組,(‘ip地址為字串’,port為int)
listen(backlog):將sever設定為監聽狀態 backlog:最多允許多少個連線連線到server,不特別設定的話將自動設定一個合理的連線數
accept():準備接收client端傳送的資料 返回兩個內容,sock和addr sock:包含socket的資訊 addr:包含client的IP地址和埠號的元組
準備工作完成,可以傳送和接收client的資訊
注意:要用accept()返回的sock來發送和接收資訊
sock.recv(buffersize):用於接受client傳送的資料 buffersize:每次可傳遞的最大位元組數
sock.send(data):向client傳送資料 data:資料內容
注意:傳送/接收資料時要先轉碼/解碼,不然會報錯 encode(),decode()
client部分
client和server基本一樣,唯一的區別就是有個connect,比較簡單 建立socket client.connect(addr):連線至sever addr:元組,包含server的IP地址和埠號
注意轉碼和解碼
下面是原始碼:
import socket server = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM) server.bind(('192.168.44.1',8601)) server.listen() print("successful") sock,address = server.accept() print(str(sock),address) while True: send_data = input("傳送內容:") sock.send(send_data.encode('utf-8')) recv_data = sock.recv(1024) print(recv_data.decode('utf-8'))
import socket
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('192.168.44.1',8601))
while True:
recv_data = client.recv(1024)
print("sever:",recv_data.decode('utf-8'))
send_data = input("傳送:")
client.send(send_data.encode('utf-8'))