網路程式設計 py

2021-08-20 10:34:24 字數 2392 閱讀 1205

學習目標:如何基於socket程式設計,來開發一款c/s架構(c:client客戶端  s:server服務端)軟體

網路程式設計:實現計算機與計算機間的通訊

通訊協議:

tcp:可靠,有狀態的,長連線的協議,像打**一樣

udp:不可靠,無連線,像發簡訊一樣

tcp和udp屬於運輸層 

建立tcp scoket:   s=socket.socket(socket.af_inet,socket.sock_stream)  

socket主要型別:socket.af_inet                         伺服器之間網路通訊

socket.sock_stream             流式socket,for tcp

socket函式:伺服器socket函式,客戶端socket函式和公共socket函式

伺服器socket函式:

bind(address)       以元組的形勢表示位址

listen(backing)      掛起的最大連線數

accept()                 接受tcp連線並返回

客戶端socket函式:

connent(address) 連線到address

connent_ex(address)  動能相同,但返回0

公共socket函式:

recv()                       接受tcp資料

send()                      傳送tcp資料

sendall()                  完整傳送tcp資料

socket應用及使用步驟(下面的案例是執行緒和socket結合的案例)

先建立服務端流程

#群聊的客戶端

import socket,threading

#建立個服務端

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

#邦定ip和埠

server.bind(('192.168.43.30',8000))

#設定最大掛起連線數 5

server.listen(5)

print('服務端啟動 等待客戶端連線。。。。。')

#中間轉換資料的變數

message=''

#建立一把鎖

lock=threading.lock()

cond=threading.condition(lock=lock)

#不停的收 不停的發

def recv_msg(conn,address):

while true:

msg=conn.recv(1024)

global message

cond.acquire()

message=str(address)+'>>:'+msg.decode()

print('收到',+message)

cond.notify_all()

cond.release()

def send_msg(conn,address):

while true:

cond.acquire()

cond.wait()

cond.release()

conn.sendall(message.encode('utf-8'))

print('傳送'+message)

#為每乙個連線者提供收和發的執行緒

while true:

conn,address=server.accept()

threading._start_new_thread(recv_msg,(conn,address))#不停的收

threading._start_new_thread(send_msg,(conn,address))#不停的發

再建立客戶端流程:

import socket,threading

#建立客戶端

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

#建立連線

client.connect(('192.168.43.30',8000))

def recv_msg():

while true:

msg=client.recv(1024)

print('收到:',msg.encode)

threading._start_new_thread(recv_msg,())

#不停的發

while true:

msg=input('請資料訊息:')

client.send(msg.encode('utf-8'))

day 5 28 py網路程式設計

埠 socket簡介 socket為乙個類 s接收的是返回的物件引用 2018 5 28 15 52 47 開始進行網路程式設計 udp 套接字 encode 編碼 decode 解碼 from socket import 建立乙個udp套接字 udpsocket socket af inet,so...

py函式式程式設計

函式式程式設計把計算視為函式而非指令,純函式式程式設計不需要變數,沒有 測試簡單,python支援的函式式程式設計不是純函式式程式設計,允許有變數存在,支援高階函式,支援閉包,有限度的支援匿名函式 變數可以指向函式,而函式又可以把變數作為引數,所以高階函式就是把函式作為引數的函式。def add x...

py程式設計 小白新奇的技巧

1 同時遍歷乙個列表的索引和元素 3 關於jupyter conda不顯示conda裡存在的環境的問題 首先需要安裝 conda install ipykernel啟用對應的conda環境 source activate 環境名稱將環境寫入notebook的kernel中 python m ipyk...