前段時間學習了一下套接字編程,這裏先簡單介紹一下關於套接字python
1.什麼是套接字編程:編程
源IP地址和目的IP地址以及源端口號和目的端口號的組合稱爲套接字。其用於標識客戶端請求的服務器和服務。服務器
- 網絡化網絡化的應用程序在開始任何通信以前都必需要建立套接字,沒有它就徹底沒辦法通信
- 一開始,套接字被設計用在同一臺主機上多個應用程序之間的通信,這也叫進程間通信,或IPC
- 套接字有兩種,分別是基於文件型的和基於網絡型的
- AF_UNIX表示」地址家族:UNIX」 –>基於文件的AF_INET表示」地址家族:Internet」–>基於網絡的
- python只支持AF_INET、AF_UNIX、AF_NETLINK家族
2.基於TCP套接字編程網絡
基於 TCP 的套接字編程的全部客戶端和服務器端都是從調用socket 開始,它返回一個套接字描述符。客戶端隨後調用connect 函數,服務器端則調用 bind、listen 和accept 函數。socket
3.套接字基本原理函數
在網絡中最經常使用的通訊模式是客戶機/服務器模式(Client/Server模式或C/S模式)。學習
服務器方要先啓動,並監聽指定端口,等待客戶端的請求,根據客戶端的請求提供相應服務。spa
通常來講,要進行網絡通訊,必需要在網絡的每一端都要創建一個套接字,兩個套接字之間是能夠創建鏈接的,也是能夠無鏈接的,並經過對套接字的「讀」、「寫」操做實現網絡通訊功能。相似於文件的打開、讀、寫、關閉的方式。設計
4.與套接字相關的系統調用:blog
- socket---建立一個套接字
- close---銷燬一個套接字
- connect--在兩個套接字之間創建鏈接
- bind---將一個服務器套接字綁定一個地址
- listen---設置一個套接字爲接受鏈接狀態
- accept---接受一個鏈接請求併爲新建的鏈接建立一個新的套接字
==== ==當你建立一個套接字的時候,須要指明三種選項:命名空間,通訊類型和協議=====
5.服務器端程序:
- 加載套接字庫
- 建立套接字(socket)
- 將套接字綁定到一個本地地址端口上(bind)
- 將套接字設爲監聽模式,準備接收客戶請求(listen)
- 等待客戶請求到來,請求到來後,接受鏈接請求,返回一個新的對應這次鏈接的套接字(accept)
- 用返回的套接字和客戶端進行通訊(send/recv)
- 返回,等待另外一客戶請求
- 關閉套接字
6.客戶端程序:
- 加載套接字庫
- 建立套接字(socket)
- 向服務器發出鏈接請求(connect)
- 和服務器進行通訊(send/recv)
- 關閉套接字(close)
下面來一張圖形象生動一下