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"
>>>
未完...待續...