Python中的 socket 套接字

socket一直沒去好好學習一下,因為太懶了 -.-!!

小知識點:
1.計算機中一般可以見到這樣的IP地址127.0.0.1,意思是本機地址,即始終指向當前計算機
2.關于有效端口號:范圍0~65535(其中小于1024的端口號預留給了系統),如果使用linux,
   那么可以在/etc/servuices文件中查看預留端口的列表(以及服務器/協議 和 套接字類型)。

目錄

1. 關于socket
2. 創建套接字
3. 創建簡單的客戶端->服務器架構
1. 關于socket

首先需要有大概的認知:什么是 客戶端->服務器模式:

1.服務器:簡單來講就是一個被動接受請求信息并處理相關請求的一系列硬件或軟件。
2.客戶端:就是主動請求服務器,希望獲得相關的服務。

套接字:通俗一點就是用于相互通訊。
套接字有兩種類型:基于文件的和面向網絡的。
在python中有個模塊就叫 socket,包含socket()函數:

socket(socket_family,socket_type,protocol=0)   # socket()函數原型

這里需要注意一下:

socket_family  : 代表 地址家族(address family,縮寫AF),python只支持
                 AF_UNIX、AF_NETLINK、AF_TIPC、AF_INET這幾個家族,python網絡編程使用的地址家族:AF_INET;
  
  socket_type  : TCP/IP 面向連接的套接字類型 SOCK_STREAM(協議:傳輸控制協議(TCP));
                 UDP/IP 無連接的套接字類型 SOCK_DGRAM(協議:用戶數據報協議(UDP))

    protocol   : 通常省略,默認為0。
2. 創建套接字
from socket import *   # 導入 socket 模塊
# 創建 TCP/IP 套接字
tcp_socket = socket(AF_INET,SOCK_STREAM )   # 調用 socket() 函數  
# 創建 UDP/IP 套接字
udp_socket = socket(AF_INET,SOCK_DGRAM)
3. 創建簡單的客戶端->服務器架構

這里使用兩個python的解釋器來模擬客戶端和服務器:

# 第一個python解釋器:服務器
? python
Python 3.6.2 (default, Jul 20 2017, 03:52:27) 
[GCC 7.1.1 20170630] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from socket import *                  # 導入 socket 模塊
>>> tcp_server = socket(AF_INET,SOCK_STREAM)
>>> tcp_server.bind(('127.0.0.1',12345))  # 因為是同一臺計算機,所以用本地IP,端口號隨意一個有效位
>>> tcp_server.listen(1)                  # 監聽連接,并且在連接被轉接或拒絕之前,設置傳入連接請求的最大數,這里是 1
>>> tcp_socket,addr = tcp_server.accept() # accept() 之后將一直處于等待狀態,直到連接被建立。
>>> tcp_socket.send(b'hello,i\'m server') # 成功建立連接之后,利用send()發送信息,注意不支持utf-8,則用 send(b'字符串') 的模式
16                                        # 發送的字節數
>>> 

---------------------------------------------------我是分割線-------------------------------------------------------------

# 第二個python解釋器:客戶端
? python
Python 3.6.2 (default, Jul 20 2017, 03:52:27) 
[GCC 7.1.1 20170630] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from socket import *                        # 導入 socket 模塊
>>> tcp_client = socket(AF_INET,SOCK_STREAM)
>>> tcp_client.connect(('127.0.0.1',12345))     # 確認sccept() 的連接,即這里將建立連接
>>> masg = tcp_client.recv(1024)                # 接收TCP消息,1024為緩沖區即 1 KB,此參數可根據網絡性能和程序需要來更改。
>>> print(masg)                                 # 打印接收到的TCP消息
b"hello,i'm server"
>>> 

未完...待續...

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • http://python.jobbole.com/85231/ 關于專業技能寫完項目接著寫寫一名3年工作經驗的J...
    燕京博士閱讀 7,629評論 1 118
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,981評論 19 139
  • php 的 socket 編程算是比較難以理解的東西吧,不過,我們只要理解 socket 幾個函數之間的關系,以及...
    9ef822571b70閱讀 1,093評論 0 12
  • 代碼不好排版,可以到微信訂閱號(xuanhun521)查看原文。 Python黑帽編程2.8套接字編程 套接字編程...
    玄魂閱讀 669評論 1 2
  • 沒有失去,便不知擁有的快樂。當我們不能奔跑了,我們才會懷念那種無論在黑夜或清晨迎著風小跑的感覺,才會羨慕那些在球場...
    057Bonnie閱讀 72評論 0 2