1. 程式人生 > >Python--Socket用法

Python--Socket用法

Socket 是所有語言的網路程式設計中最基本最重要的知識點,為此Python也不例外,而Python也提供了較為完善和易用的語法,那麼我們就開始看看Python的Socket程式設計。

import socket
serve = socket.socket()

首先第一步我們需要匯入Python中的Socket包,並且初始化。需要注意的是:


我之所以在socket()函式中沒有填入引數,是因為在Python中它已經有了預設引數。

family(給定的套接族)一般有兩種重要引數:

socket.AF_INET 用於伺服器與伺服器之間的網路通訊
socket.AF_INET6 基於IPV6方式的伺服器與伺服器之間的網路通訊
type(套接字型別),也是一般兩個型別:
socket.SOCK_STREAM 基於TCP的流式socket通訊
socket.SOCK_DGRAM 基於UDP的資料報式socket通訊
而我們一般情況下基本用的就是AF_INET 和 SOCK_STREAM
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

伺服器端的基本流程:

1.初始化socket()

2.使用bind()繫結ip和埠號

3使用listen()監聽訊息

4.獲取客戶端的套接字地址accept()

5.使用recv()接收資料,send()傳送資料與客戶端進行互動

客戶端的基本流程:

1.初始化socket()

2.使用ip和埠號connect()連線伺服器

3.使用recv()接收資料,send()傳送資料與伺服器進行互動

在Python的Socket無外乎就兩個主要方法,一個是傳送資料的send()和接收資料的recv(),所以想要做好互動,

只要做好兩邊接收和傳送的操作即可,但需要注意的是,兩邊的send和recv都是需要正確的對應好,不然就會使

客戶端或者伺服器端出現掛起狀態。

簡易的伺服器和客戶端例子:

serve(伺服器):

import socket
server = socket.socket()             #初始化
server.bind(('localhost',6969))      #繫結ip和埠

server.listen(5)                     #監聽,設定最大數量是5
print("開始等待接受客戶端資料----")
while True:
    conn,addr = server.accept()      #獲取客戶端地址
    print(conn,addr)
    print("客戶端來資料了")
    while True:
        data = conn.recv(1024)       #接收資料
        print("接受的資料:",data)
        if not data:
            print("client has lost")
            break
        conn.send(data.upper())     #返回資料    

serve.close()                       #關閉socket


client(客戶端):
import socket

client = socket.socket()

client.connect(('localhost',9999))  #連線伺服器

while True:
    msg = input(">>:").strip()
    if len(msg) == 0 :continue
    client.send(msg.encode())   #傳送資料

    data = client.recv(1024)    #接收資料

    print("返回資料:",data.decode())


client.close()
這是一個能一直保持連線的程式,因為上面的步驟只是最基本的用法,所以想要能一直連線的程式,就需要使用

while True保持迴圈,還有一個問題就是,此程式只能連線一個客戶端,並不能支援多併發,所以當出現第二個客戶端時,就會出現掛起不動,所以想要完成多併發,則需要使用Python中的另外一個庫“socketserver”,我將會在

下一個文章裡寫出~吐舌頭