1. Socket 基本概念
在網(wǎng)絡(luò)編程中,socket 是一個(gè)通信端點(diǎn)。它允許程序發(fā)送和接收數(shù)據(jù)。根據(jù)通信協(xié)議的不同,socket 可以分為以下幾種類(lèi)型:
- 流式 socket (SOCK_STREAM) :提供可靠的雙向連接,如 TCP。
- 數(shù)據(jù)報(bào) socket (SOCK_DGRAM) :提供不可靠的雙向連接,如 UDP。
2. 創(chuàng)建 Socket
在 Python 中,我們使用 socket
模塊來(lái)創(chuàng)建 socket。以下是創(chuàng)建一個(gè) TCP socket 的基本步驟:
import socket
# 創(chuàng)建 socket 對(duì)象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
這里,socket.AF_INET
表示使用 IPv4 地址,socket.SOCK_STREAM
表示使用 TCP 協(xié)議。
3. 綁定 Socket
在服務(wù)器端,我們需要將 socket 綁定到一個(gè)特定的地址和端口上,以便客戶端可以連接到它。
# 綁定到地址和端口
s.bind(('localhost', 12345))
4. 監(jiān)聽(tīng)連接
服務(wù)器端需要監(jiān)聽(tīng)連接請(qǐng)求。
# 開(kāi)始監(jiān)聽(tīng),參數(shù)指定最大連接數(shù)
s.listen(5)
5. 接受連接
服務(wù)器端接受客戶端的連接請(qǐng)求。
# 接受連接,返回一個(gè)新的 socket 對(duì)象和客戶端地址
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 對(duì)象
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ā)生的各種異常,如連接錯(cuò)誤、超時(shí)等。
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é)
通過(guò)上述步驟,我們了解了如何使用 Python 的 socket 庫(kù)來(lái)發(fā)送和接收數(shù)據(jù)。這包括創(chuàng)建 socket、綁定、監(jiān)聽(tīng)、接受連接、發(fā)送和接收數(shù)據(jù)以及關(guān)閉連接。在實(shí)際應(yīng)用中,我們還需要考慮異常處理和錯(cuò)誤處理,以確保程序的健壯性。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7241瀏覽量
91034 -
Socket
+關(guān)注
關(guān)注
1文章
212瀏覽量
35572 -
端口
+關(guān)注
關(guān)注
4文章
1045瀏覽量
32727 -
網(wǎng)絡(luò)編程
+關(guān)注
關(guān)注
0文章
72瀏覽量
10543
發(fā)布評(píng)論請(qǐng)先 登錄
使用lwip socket udp功能,開(kāi)發(fā)板為客戶端時(shí)不能夠接收服務(wù)器端發(fā)送過(guò)來(lái)的數(shù)據(jù) ?
請(qǐng)問(wèn)使用lwip創(chuàng)建socket,該如何做到非阻塞的接收發(fā)送數(shù)據(jù)?
cc3200 UDP同一個(gè)socket發(fā)送可以,接收失敗?
串口接收數(shù)據(jù)的方法
CH395 Socket3 Socket4 Socket5 配置成TCP_Client,Socket4 Socket5不能接收數(shù)據(jù)怎么解決?
請(qǐng)問(wèn)使用lwip創(chuàng)建socket,該如何做到非阻塞的接收發(fā)送數(shù)據(jù)?
使用串行接口IICA實(shí)現(xiàn)主發(fā)送和接收

使用安卓Socket實(shí)現(xiàn)發(fā)送接收數(shù)據(jù)WiFi轉(zhuǎn)串口連接單片機(jī)實(shí)現(xiàn)控制的程序

實(shí)現(xiàn)安卓Socket連接實(shí)現(xiàn)發(fā)送和接收數(shù)據(jù)的程序免費(fèi)下載

評(píng)論