服務端:依舊為傳送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 建立乙個列表儲存...