網路程式設計之socket程式設計

2022-09-09 03:21:11 字數 2806 閱讀 1727

什麼是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) #

聽訊息,聽話

print

(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...