1. Socket 基本概念
在網(wǎng)絡(luò)編程中,socket 是一個通信端點。它允許程序發(fā)送和接收數(shù)據(jù)。根據(jù)通信協(xié)議的不同,socket 可以分為以下幾種類型:
- 流式 socket (SOCK_STREAM) :提供可靠的雙向連接,如 TCP。
- 數(shù)據(jù)報 socket (SOCK_DGRAM) :提供不可靠的雙向連接,如 UDP。
2. 創(chuàng)建 Socket
在 Python 中,我們使用 socket
模塊來創(chuàng)建 socket。以下是創(chuàng)建一個 TCP socket 的基本步驟:
import socket
# 創(chuàng)建 socket 對象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
這里,socket.AF_INET
表示使用 IPv4 地址,socket.SOCK_STREAM
表示使用 TCP 協(xié)議。
3. 綁定 Socket
在服務(wù)器端,我們需要將 socket 綁定到一個特定的地址和端口上,以便客戶端可以連接到它。
# 綁定到地址和端口
s.bind(('localhost', 12345))
4. 監(jiān)聽連接
服務(wù)器端需要監(jiān)聽連接請求。
# 開始監(jiān)聽,參數(shù)指定最大連接數(shù)
s.listen(5)
5. 接受連接
服務(wù)器端接受客戶端的連接請求。
# 接受連接,返回一個新的 socket 對象和客戶端地址
client_socket, addr = s.accept()
print(f"Connected by {addr}")
6. 發(fā)送數(shù)據(jù)
使用 send
方法發(fā)送數(shù)據(jù)。
# 發(fā)送數(shù)據(jù)
message = 'Hello, client!'
client_socket.send(message.encode('utf-8'))
7. 接收數(shù)據(jù)
使用 recv
方法接收數(shù)據(jù)。
# 接收數(shù)據(jù)
data = client_socket.recv(1024)
print(f"Received: {data.decode('utf-8')}")
8. 關(guān)閉連接
完成通信后,關(guān)閉 socket。
# 關(guān)閉連接
client_socket.close()
s.close()
9. 客戶端連接
客戶端連接到服務(wù)器的步驟如下:
# 創(chuàng)建 socket 對象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 連接到服務(wù)器
s.connect(('localhost', 12345))
# 發(fā)送數(shù)據(jù)
s.send('Hello, server!'.encode('utf-8'))
# 接收數(shù)據(jù)
data = s.recv(1024)
print(f"Received: {data.decode('utf-8')}")
# 關(guān)閉連接
s.close()
10. 異常處理
在網(wǎng)絡(luò)編程中,異常處理是非常重要的。我們需要處理可能發(fā)生的各種異常,如連接錯誤、超時等。
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 12345))
s.send('Hello, server!'.encode('utf-8'))
data = s.recv(1024)
print(f"Received: {data.decode('utf-8')}")
except socket.error as e:
print(f"Socket error: {e}")
finally:
s.close()
11. 總結(jié)
通過上述步驟,我們了解了如何使用 Python 的 socket 庫來發(fā)送和接收數(shù)據(jù)。這包括創(chuàng)建 socket、綁定、監(jiān)聽、接受連接、發(fā)送和接收數(shù)據(jù)以及關(guān)閉連接。在實際應(yīng)用中,我們還需要考慮異常處理和錯誤處理,以確保程序的健壯性。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7157瀏覽量
89638 -
Socket
+關(guān)注
關(guān)注
0文章
212瀏覽量
34902 -
端口
+關(guān)注
關(guān)注
4文章
990瀏覽量
32229 -
網(wǎng)絡(luò)編程
+關(guān)注
關(guān)注
0文章
72瀏覽量
10110
發(fā)布評論請先 登錄
相關(guān)推薦
使用lwip socket udp功能,開發(fā)板為客戶端時不能夠接收服務(wù)器端發(fā)送過來的數(shù)據(jù) ?
請問使用lwip創(chuàng)建socket,該如何做到非阻塞的接收發(fā)送數(shù)據(jù)?
cc3200 UDP同一個socket發(fā)送可以,接收失?。?/a>
串口接收數(shù)據(jù)的方法
CH395 Socket3 Socket4 Socket5 配置成TCP_Client,Socket4 Socket5不能接收數(shù)據(jù)怎么解決?
請問使用lwip創(chuàng)建socket,該如何做到非阻塞的接收發(fā)送數(shù)據(jù)?
使用串行接口IICA實現(xiàn)主發(fā)送和接收
![使用串行接口IICA實現(xiàn)主<b class='flag-5'>發(fā)送</b>和<b class='flag-5'>接收</b>](https://file.elecfans.com/web2/M00/49/BB/pYYBAGKhvFWATFHwAAAPsdOpCVI143.jpg)
使用安卓Socket實現(xiàn)發(fā)送接收數(shù)據(jù)WiFi轉(zhuǎn)串口連接單片機實現(xiàn)控制的程序
![使用安卓<b class='flag-5'>Socket</b>實現(xiàn)<b class='flag-5'>發(fā)送</b><b class='flag-5'>接收</b><b class='flag-5'>數(shù)據(jù)</b>WiFi轉(zhuǎn)串口連接單片機實現(xiàn)控制的程序](https://file.elecfans.com/web1/M00/A3/2E/pIYBAF1SIBaAe3WQAABXO_DiRaY753.png)
實現(xiàn)安卓Socket連接實現(xiàn)發(fā)送和接收數(shù)據(jù)的程序免費下載
![實現(xiàn)安卓<b class='flag-5'>Socket</b>連接實現(xiàn)<b class='flag-5'>發(fā)送</b>和<b class='flag-5'>接收</b><b class='flag-5'>數(shù)據(jù)</b>的程序免費下載](https://file.elecfans.com/web1/M00/95/4B/pIYBAFz15liAO9CXAAOSapDtRM4792.png)
評論