## Socket
百度百科上對Socket的解釋是:Socket通常稱作“套接字”,用于描述IP地址和端口,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。
## Socket通信
下面圖是socket服務器與客戶端通信的過程,接下來我們簡單講一下編程
<div align="center"><img src="images/screenshot_1560395848760.png"/></div>
使用socket通信,首先導入socket模塊
```python
import socket
```
### TCP服務器
1. 服務器創建套接字,綁定套接字到本地IP與端口
socket(family, type[, protocal])使用給定的套接族,套接字類型,協議編號(默認為0)來創建套接字。
```python
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind()
```
2. 開始監聽鏈接
s.listen(backlog)
backlog為拒絕鏈接前,系統可以掛起的最大連接數,至少為1。
```python
s.listen(2)
```
3. 進入循環,不斷接收客戶端的鏈接請求
```python
while True:
s.accept()
```
accept()接受TCP鏈接并返回(conn, address),其中conn是新的套接字對象,可以用來接收和發送數據,address是鏈接客戶端的地址。
4. 接收客戶端傳來的數據,并且給對方發數據
```python
s.recv()
s.sendall()
```
注意:
服務器與客戶端不能直接發送列表,元素,字典等帶有數據類型的格式,發送的內容必須是字符串數據。
5. 傳輸完畢后,關閉套接字。
```python
s.close()
```
#### 簡單的服務器端代碼
```python
import socket
HOST, PORT = '', 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(5)
print "Server start at:%s:%s" %(HOST, PORT)
print "wait for connection..."
while True:
conn, addr = s.accept()
print "Connected", addr
while True:
data = conn.recv(1024)
print data
conn.send("server received you message.")
conn.close()
s.close()
```
TCP客戶端
1. 創建套接字并鏈接至遠端地址(服務器)
```python
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect()
```
客戶端調用connect()方法來建立與服務器的鏈接,并開始三次握手。握手保證了客戶端可以正常連接到服務器,反之亦然。
2. 連接后發送數據和接收數據
```python
s.sendall()
s.recv()
```
3. 傳輸完畢后關閉套接字
```python
s.close()
```
#### 簡單的客戶端代碼
```python
import socket
HOST, PORT = '192.168.0. 118', 8000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
while True:
cmd = raw_input("Input msg:")
s.send(cmd)
data = s.recv(1024)
print data
s.close()
```
參考:https://blog.51cto.com/loufeng/2340821
- 前言
- 第一章 樹莓派快速入門
- 1. 初識樹莓派3B+
- 2. 燒錄系統
- 3. 樹莓派連接鍵盤鼠標和顯示器
- 4. 啟動樹莓派
- 5.樹莓派連接網絡
- 6. Windows遠程訪問樹莓派
- 7. 終端通過raspi-config配置樹莓派
- 第二章 樹莓派編程
- 1. Linux入門操作
- 常用的linux命令
- 重要的快捷鍵
- 通過命令安裝軟件
- 樹莓派關機/重啟
- 2. 創建、編輯和保存文件
- 3. 創建并運行Python程序
- 4. 使用樹莓派的GPIO口
- 第三章 樹莓派套件應用
- 樹莓派3B+ IO擴展板介紹
- 家居系統
- 會呼吸的RGB燈
- 樹莓派控制家電
- 制作一個環境檢測儀
- 樹莓派攝像頭做遠程監控
- 攝像頭使用
- socket通信
- PiCamera + socket遠程監控
- AI語音
- 配置snowboy
- 自定義響應
- 采集語音和語音播放
- 語音機器人
- 圖靈機器人
- 俄羅斯方塊小游戲
- pygame基本使用
- ADKeyboard使用
- 俄羅斯方塊實現原理
- 俄羅斯方塊代碼講解
- 手勢控制的樹莓派相冊
- 模塊介紹
- 爬取圖片
- 電子相冊
- 附錄
- 網址