一,socket的定義
socket是應用層與
tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。
二,socket的執行流程
先從伺服器端說起。伺服器端先初始化
socket,然後與埠繫結(bind),對埠進行監聽(listen),呼叫accept阻塞,等待客戶端連線。在這時如果有個客戶端初始化乙個socket,然後連線伺服器(connect),如果連線成功,這時客戶端與伺服器端的連線就建立了。客戶端傳送資料請求,伺服器端接收請求並處理請求,然後把回應資料傳送給客戶端,客戶端讀取資料,最後關閉連線,一次互動結束
三。socket的應用
服務端import socket
#1、買手機
phone=socket.socket(socket.af_inet,socket.sock_stream) #tcp稱為流式協議,udp稱為資料報協議sock_dgram
# print(phone)
#2、插入/繫結手機卡
# phone.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)
phone.bind(('127.0.0.1',8080))
#3、開機
phone.listen(5) # 半連線池,限制的是請求數
#4、等待**連線
print('start....')
while true: # 連線迴圈
conn,client_addr=phone.accept() #(三次握手建立的雙向連線,(客戶端的ip,埠))
# print(conn)
print('已經有乙個連線建立成功',client_addr)
#5、通訊:收\發訊息
while true: # 通訊迴圈
try:
print('服務端正在收資料...')
data=conn.recv(1024) #最大接收的位元組數,沒有資料會在原地一直等待收,
即傳送者傳送的資料量必須》0bytes
# print('===>')
if len(data) == 0:break #在客戶端單方面斷開連線,服務端才會出現收空資料的情況
print('來自客戶端的資料',data)
conn.send(data.upper())
except connectionreseterror:
break
#6、掛掉**連線
conn.close()
#7、關機
phone.close()
客戶端import socket
#1、買手機
phone=socket.socket(socket.af_inet,socket.sock_stream)
# print(phone)
#2、撥**
phone.connect(('127.0.0.1',8080)) # 指定服務端ip和埠
#3、通訊:發\收訊息
while true: # 通訊迴圈
msg=input('>>: ').strip() #msg=''
if len(msg) == 0:continue
phone.send(msg.encode('utf-8'))
# print('has send----->')
data=phone.recv(1024)
# print('has recv----->')
print(data)
#4、關閉
phone.close()
socket程式設計
一直以為serversocket accept之後客戶端才能發資訊,實驗後得出如下結論 1 serversocket沒有accept時,client是可以傳送資訊到server端的。2 serversocket accept之後,正在處理訊息時,client也是可以傳送資訊到server端。如果se...
Socket程式設計
對tcp ip udp socket程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission cont...
socket程式設計
建立socket 建立乙個 socket,它可用於在基於 tcp ip 的網路 如 internet 上通訊。socket s new socket addressfamily.internetwork,sockettype.stream,protocoltype.tcp 若要使用 udp 而不是 ...