1. 程式人生 > >socket非阻塞模組

socket非阻塞模組

一 服務端程式

# 匯入模組
import socketserver
import random

# 定義一個類
class MyServer(socketserver.BaseRequestHandler):
    # 如果handle方法出現報錯,則會進行跳過
    # setup方法和finish方法無論如何都會進行執行
    # 首先執行setup
    def setup(self):
        pass
    # 然後執行handle
    def handle(self):
        # 定義連線變數
        conn =self.request
        # 傳送訊息定義
        msg = "Hello World!"
        # 訊息傳送
        conn.send(msg.encode())
        # 進入迴圈,不斷接收客戶端訊息
        while True:
            #接收客戶端訊息
            data = conn.recv(1024)
            # 列印訊息
            print(data.decode())
            # 接收到exit,則進行迴圈的退出
            if data==b'exit':
                break
            conn.send(data)
            conn.send(str(random.randint(1,1000)).encode())
        conn.close()
    # 最後執行finish
    def finish(self):
        pass

if __name__=="__main__":
    # 建立多執行緒例項
    server = socketserver.ThreadingTCPServer(('127.0.0.1',8888),MyServer)
    # 開啟啟動多執行緒,等待連線
    server.serve_forever()

二 客戶端程式

# 匯入模組
import socket

# 建立例項
client =socket.socket()
#訪問的服務端的ip和埠
ip_port=("127.0.0.1",8888)
# 連線主機
client.connect(ip_port)

#定義一個迴圈,不斷髮送訊息
while True:
    # 接收主機資訊
    data = client.recv(1024)
    # 列印接收的資料
    # 此處byte型資料特指python3.x以上
    print(data.decode())
    # 輸入傳送的訊息
    msg_input=input("請輸入傳送的訊息")
    # 訊息傳送
    client.send(msg_input.encode())
    if msg_input=="exit":
        break
    data = client.recv(1024)
    print(data.decode())

三 執行結果

1 服務端

E:\Python\python_lab\venv\Scripts\python.exe E:/Python/python_lab/socket_tcp_server2.py

DNS

tcp

how are you

2 客戶端1

E:\Python\python_lab\venv\Scripts\python.exe E:/Python/python_lab/socket_clent.py

Hello World!

請輸入傳送的訊息DNS

DNS

857

請輸入傳送的訊息

3 客戶端2

E:\Python\python_lab\venv\Scripts\python.exe E:/Python/python_lab/socket_clent.py

Hello World!

請輸入傳送的訊息tcp

tcp

879

請輸入傳送的訊息

4 客戶端3

E:\Python\python_lab\venv\Scripts\python.exe E:/Python/python_lab/socket_clent.py

Hello World!

請輸入傳送的訊息how are you

how are you

679

請輸入傳送的訊息