什麼是socket程式設計:
我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的乙個抽象層,它把tcp/ip層複雜的操作抽象為幾個簡單的介面**用層呼叫已實現程序在網路中通訊。
socket起源於unix,在unix一切皆檔案哲學的思想下,socket是一種"開啟—讀/寫—關閉"模式的實現,伺服器和客戶端各自維護乙個"檔案",在建立連線開啟後,可以向自己檔案寫入內容供對方讀取或者讀取對方內容,通訊結束時關閉檔案。
socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp/ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。
所以,我們無需深入理解tcp/udp協議,socket已經為我們封裝好了,我們只需要遵循socket的規定去程式設計,寫出的程式自然就是遵循tcp/udp標準的。
socket工作流程:
先從伺服器端說起。伺服器端先初始化socket,然後與埠繫結(bind),對埠進行監聽(listen),呼叫accept阻塞,等待客戶端連線。在這時如果有個客戶端初始化乙個socket,然後連線伺服器(connect),如果連線成功,這時客戶端與伺服器端的連線就建立了。客戶端傳送資料請求,伺服器端接收請求並處理請求,然後把回應資料傳送給客戶端,客戶端讀取資料,最後關閉連線,一次互動結束
基於tdp協議的socket程式設計:
服務端:ss =socket() #建立伺服器套接字
ss.bind() #把位址繫結到套接字
ss.listen() #監聽鏈結
inf_loop: #伺服器無限迴圈
cs =ss.accept() #接受客戶端鏈結
comm_loop: #通訊迴圈
cs.recv()/cs.send() #對話(接收與傳送)
cs.close() #關閉客戶端套接字
ss.close() #關閉伺服器套接字(可選)
客戶端1 cs =socket() # 建立客戶套接字
2cs.connect() # 嘗試連線伺服器
3comm_loop: # 通訊迴圈
4 cs.send()/cs.recv() # 對話(傳送/接收)
5 cs.close() # 關閉客戶套接字
#_*_coding:utf-8_*_
__author__ = '
linhaifeng
'import
socket
ip_port=('
127.0.0.1
',9000) #
**卡bufsize=1024 #
收發訊息的尺寸
s=socket.socket(socket.af_inet,socket.sock_stream) #
買手機s.bind(ip_port) #
手機插卡
s.listen(5) #
手機待機
conn,addr=s.accept() #
手機接**
#print(conn)
#print(addr)
print('
接到來自%s的**
' %addr[0])
msg=conn.recv(bufsize) #
聽訊息,聽話
(msg,type(msg))
conn.send(msg.upper())
#發訊息,說話
conn.close()
#掛**
s.close()
#手機關機
服務端
#_*_coding:utf-8_*_
__author__ = '
linhaifeng
'import
socket
ip_port=('
127.0.0.1
',9000) #必須與服務端介面相同
bufsize=1024 s=socket.socket(socket.af_inet,socket.sock_stream)
s.connect_ex(ip_port)
#撥**
s.send(
'linhaifeng nb
'.encode('
utf-8
')) #
發訊息,說話(只能傳送位元組型別)
feedback=s.recv(bufsize) #
收訊息,聽話
print(feedback.decode('
utf-8'))
s.close()
#掛**
客戶端
網路程式設計之Socket程式設計
對 tcp ip udp socket 程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission co...
網路程式設計之socket程式設計
大多數專案是在linux下開發伺服器端,而在windows下開發客戶端,需要經常在兩大平台之間進行切換,單獨學習一種平台沒有實踐意義。值得欣慰的是,兩大平台下的 socket 程式設計非常相似,並不會增加多少學習成本。網路程式設計就是編寫程式使兩台聯網的計算機相互交換資料。這就是socket的全部內...
網路程式設計之socket
套接字 socket 是乙個抽象層,應用程式可以通過它傳送或接收資料,可對其進行像對檔案一樣的開啟 讀寫和關閉等操作。套接字允許應用程式將i o插入到網路中,並與網路中的其他應用程式進行通訊。網路套接字是ip位址與埠的組合。套接字起源於 20 世紀 70 年代加利福尼亞大學伯克利分校版本的 unix...