Python基礎 40 Socket 案例二

2021-09-22 21:12:44 字數 3792 閱讀 2682

服務端:依舊為傳送1~30之間隨機的30個數字,以及將客戶端返回的結果展示出來

客戶端:

1)第乙個client計算奇偶性,將結果返回

2)第二個client計算數字的2倍,將結果返回

3)第三個client判斷數字是否大於10,將結果返回

server端

# coding:utf-8

import socket

import random

import time

sock = socket.socket(socket.af_inet,socket.sock_stream)

sock.bind(("",8000))

sock.listen(5)

# 在1~30之間隨機生成的30個數字

random_num = [random.randint(1,30) for i in range(30)]

def send_data(content,address):

print("%s:%s 連線中"%address)

for num in random_num:

# 這裡加延遲是以免資料錯亂

time.sleep(1)

# 服務端傳送資料

content.send("%d".encode()%num)

# 服務端接收資料

recv = content.recv(512).decode()

print(recv)

while true:

content, address = sock.accept()

send_data(content,address)

sock.close()

client端一(計算奇偶數)

# coding:utf-8

import socket

sock = socket.socket(socket.af_inet,socket.sock_stream)

sock.connect(("127.0.0.1",8000))

def recv_data():

recv = sock.recv(512).decode()

rec = int(recv)

if rec % 2 == 0:

print("%d是偶數"%rec)

sock.send("%d是偶數".encode()%rec)

else:

print("%d是奇數" % rec)

sock.send("%d是奇數".encode()%rec)

while true:

try:

recv_data() # 直接執行到最後的時候會報錯,這裡就直接忽略報錯資訊

except exception as e:

pass

sock.close()

client端二(計算兩倍值)

# coding:utf-8

import socket

sock = socket.socket(socket.af_inet,socket.sock_stream)

sock.connect(("127.0.0.1",8000))

def recv_data():

recv = sock.recv(512).decode()

rec = int(recv)

res = rec*2

print("%d的兩倍是%d"%(rec,res))

sock.send("%d的兩倍是%d".encode()%(rec,res))

while true:

try:

recv_data()

except exception as e:

pass

sock.close()

client端三(判斷大於10)

# coding:utf-8

import socket

sock = socket.socket(socket.af_inet,socket.sock_stream)

sock.connect(("127.0.0.1",8000))

def recv_data():

recv = sock.recv(512).decode()

rec = int(recv)

if rec > 10:

print("%d大於10"%rec)

sock.send("%d大於10".encode()%rec)

else:

print("%d小於10"%rec)

sock.send("%d小於10".encode()%rec)

while true:

try:

recv_data()

except exception as e:

pass

sock.close()

啟動服務端後,依次執行client1、client2、client3

上面可以實現我們所要的功能了,但是服務端是乙個乙個去處理客戶端請求的,然而我們希望三個計算功能可以同時進行並將結

果返回給服務端。

這樣就可以與多執行緒來結合,讓服務端開啟多個執行緒來與客戶端互動,同時進行,節約執行時間提高效率

修改server端**,client不變

# coding:utf-8

import socket

import random

import time

import threading

sock = socket.socket(socket.af_inet,socket.sock_stream)

sock.bind(("",8000))

sock.listen(5)

# 在1~30之間隨機生成的30個數字

random_num = [random.randint(1,30) for i in range(30)]

def send_data(content,address):

print("%s:%s 連線中"%address)

for num in random_num:

# 這裡加延遲是以免資料錯亂

time.sleep(1)

# 服務端傳送資料

content.send("%d".encode()%num)

# 服務端接收資料

python 網路程式設計學習 套接字socket

以前也學過套接字程式設計,這次想系統全面的學習下python網路程式設計的使用。做這個,為檢測進度,也為後續留下筆記和足跡。socket 常用函式 socket.gethostname socket.gethostbyname import socket host socket.gethostnam...

Python網路程式設計學習筆記一 socket模組

coding utf 8 主要測試python網路程式設計中socket模組的使用 涉及到的技術點 套接字 面向連線的還有非面向連線套接字 tcp面向連線 udp非面向連線 1 匯入socket 2 建立socket socket三要素 1 socket family,2 socket type 3...

Python之非同步IO模型實現socket併發

服務端 import socket sk socket.socket addr 127.0.0.1 8090 sk.bind addr sk.listen sk.setblocking false 設定非阻塞模式,accept,recv等方法均不阻塞,而是丟擲異常 conn lst 建立乙個列表儲存...