1. 程式人生 > >python 簡單的socket應用(針對TCP)

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