1. 程式人生 > >scoket(網路程式設計)

scoket(網路程式設計)

  1.c/s架構的軟體是基於網路進行通訊的
2.網路的核心即一堆協議,協議即標準,你想開發一款基於網路的通訊的軟體,就必須遵循這些標準

3.什麼是socket
socket是應用層與tcp/ip協議通訊的中間軟體,它就是一組介面。
它把複雜的TCP/IP協議族隱藏在socket介面後面,對於使用者來說,一組簡單的介面就是全部
我們只需要遵循socket的規定去程式設計,寫出的程式子讓就是遵循TCP/UDP標準的

socket=ip+port
ip是用來標識網際網路中的一臺主機的位置
port是用來標識這臺機器上的一個應用程式
ip地址是配置到網絡卡,port是應用程式開啟的
ip加por的t繫結標識網際網路中獨一無二的一個應用程式
pid標識一臺機器上不同程序




4.套接字
套接字:一臺主機上的多個應用程式之間的通訊。
套接字分為兩種:
1.基於檔案型別的套接字 AF_UNIX
unix一切皆檔案,基於檔案的套接字呼叫的就是底層的檔案系統來取資料,
兩個套接字程序執行在同一機器,可以通過訪問同一個檔案系統間接完成通訊
2.基於網路型別的套接字 AF_INET

socket啟動流程套路:
伺服器先初始化socket,然後與埠繫結(bind),對埠進行監聽(listen),呼叫accept阻塞,等待客戶端連線
客戶端初始化一個socket,然後連線伺服器(connect),如果連線成功,這時客戶端有伺服器端的連線就建立了。
客戶端傳送資料請求,伺服器端接受請求並處理請求,然後把迴應資料傳送給客戶端,客戶端讀取資料,最後關閉連線,一次互動結束


服務端套接字函式
s.bind() 繫結(主機,埠)到套接字
s.listen() 開始TCP監聽
s.accept()被動接受tcp客戶端的連線,(阻塞式)等待連線的到來

服務端套接字函式
s.connect () 主動初始化tcp伺服器連線
s.connect_ex() connect()函式的擴充套件版本,出錯時返回錯誤程式碼,而不是丟擲異常

公共用途的套接字函式
s.recv() 接受資料
s.send() 傳送tcp資料
s.sendall() 傳送完整的tcp資料
s.recvfrom 接受UDP資料
s.sento() 傳送UDP資料
s.getpeername() 連線到當前套接字的遠端的地址
s.getsockname() 當前套接字的地址
s.getsockopt() 返回指定套接字的引數
s.setsockopt() 設定指定套接字的引數
s.close() 關閉套接字