學習目標:如何基於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...