B站視頻
TCP
??TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網際協議)是指能夠在多個不同網絡間實現信息傳輸的協議簇。TCP/IP 協議不僅僅指的是 TCP和 IP 兩個協議,而是指一個由 FTP、SMTP、TCP、UDP、IP 等協議構成的協議簇,只是因為在 TCP/IP 協議中 TCP 協議和 IP 協議最具代表性,所以被稱為 TCP/IP 協
議。
??TCP/IP 傳輸協議,即傳輸控制/網絡協議,也叫作網絡通訊協議。它是在網絡的使用中的最基本的通信協議。TCP/IP 傳輸協議對互聯網中各部分進行通信的標準和方法進行了規定。并且,TCP/IP 傳輸協議是保證網絡數據信息及時、完整傳輸的兩個重要的協議。TCP/IP 傳輸協議是嚴格來說是一個四層的體系結構,應用層、傳輸層、
網絡層和數據鏈路層都包含其中。
??TCP/IP 協議是 Internet 最基本的協議,其中應用層的主要協議有 Telnet、FTP、SMTP等,是用來接收來自傳輸層的數據或者按不同應用要求與方式將數據傳輸至傳輸層;傳輸層的主要協議有 UDP、TCP,是使用者使用平臺和計算機信息網內部數據結合的通道,可以實現數據傳輸與數據共享;網絡層的主要協議有 ICMP、IP、IGMP,主要負責網絡中數據包的傳送等;而網絡訪問層,也叫網路接口層或數據鏈路層,主要協議有 ARP、RARP,主要功能是提供鏈路管理錯誤檢測、對不同通信媒介有關信息細節問題進行有效處理等。
??GT6700開發板配備了以太網接口,通過網線連接電腦。K230做從機去連接主機。
代碼展示
import os, time, socket, network
from machine import Pin
def network_connect(connect=True):LAN_LED=Pin(53, Pin.OUT) #初始化聯網指示燈if connect:LAN_LED.value(1) #LED燈點亮else:for i in range(3):LAN_LED.value(1)time.sleep_ms(300)LAN_LED.value(0)time.sleep_ms(300)
# 執行以太網連接函數
def network_use_lan(is_lan=True):if is_lan:lan = network.LAN()if lan.active():# 串口打印信息print('network information:', lan.ifconfig())lan.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))# 設定IP和DNSlan.ifconfig("dhcp") #設置DHCP模式print(lan.config("mac"))#查看網口mac地址print(lan.ifconfig()) #查看網口 ip,掩碼,網關,dns配置network_connect(True) #連接成功,點亮LEDip = lan.ifconfig()[0]else:network_connect(False) #連接失敗,LED閃爍三次ip = '0.0.0.0'raise RuntimeError("LAN 未激活")else:print("WIFI 請等待更新")ip = '0.0.0.0'network_connect(False) #連接失敗,LED閃爍三次return ipdef main():ip=network_use_lan(True) #獲取 IP 地址if not ip=='0.0.0.0':s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)ai = socket.getaddrinfo("192.168.0.1", 8080)print("Address infos:", ai)addr = ai[0][-1]print("Connecting to:", addr)try:s.connect(addr)except Exception as e:s.close()print("Connection error:", e)returnfor i in range(10):message = "GINGKO GT6700 K230 TCP client send test {0} \r\n".format(i+1)print("Sending:", message)s.sendall(message.encode())time.sleep(0.2)s.close()print("Connection closed.")main()
代碼解讀
導入必要的庫
import network # 用于網絡接口操作,例如配置 IP 地址和檢查網絡狀態。 import socket # 提供網絡通信的 Socket 接口。 import time # 提供與時間相關的函數,比如延時(sleep)。
配置網絡接口
根據參數配置網絡接口,流程如下:
??LAN 模式: is_lan=True,配置有線網絡接口(LAN),啟用 DHCP 以自動獲取 IP 地址,返回 IP。
??等待并檢查是否分配到有效 IP 地址,返回 IP。
# 執行以太網連接函數
def network_use_lan(is_lan=True): if is_lan: lan = network.LAN() if lan.active(): # 串口打印信息 print('network information:', lan.ifconfig()) lan.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))# 設定IP和DNS lan.ifconfig("dhcp") # 設置DHCP模式 print(lan.config("mac")) # 查看網口mac地址 print(lan.ifconfig()) # 查看網口 ip,掩碼,網關,dns配置 network_connect(True) # 連接成功,點亮LED ip = lan.ifconfig()[0] else: network_connect(False)# 連接失敗,LED閃爍三次 ip = '0.0.0.0' raise RuntimeError("LAN 未激活") else: print("WIFI 請等待更新") ip = '0.0.0.0' network_connect(False)# 連接失敗,LED閃爍三次 return ip
創建 Socket
# 使用 IPv4(AF_INET)和 TCP(SOCK_STREAM)協議創建 Socket 對象。 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
獲取服務器地址和端口
ai = socket.getaddrinfo("172.16.0.1", 8080) addr = ai[0][-1] # 提取地址和端口
連接到服務器
??嘗試連接到服務器,如果連接失敗則打印錯誤信息并關閉連接。
try: s.connect(addr) print("Connected to server:", addr) except Exception as e: s.close() print("Connection error:", e) return
發送數據
for i in range(10): message = "K230 TCP client send test {0} \r\n".format(i) print("Sending:", message) s.sendall(message.encode()) time.sleep(0.2)# 在循環中發送10條測試信息并且使用sendall方法確保每條消息完全發送
關閉 Socket
s.close() print("Client ends connection.")# 關閉 Socket 以釋放資源,表示客戶端結束連接。
效果展示
??配置好后,我們通過Win+R輸入cmd。在命令符里輸入ipconfig,查看我們PC與K230連接的網線IP。
這個IP就是我們PC的IP。如果PC的IP或者端口號如果更改,請在代碼中也對應更改。
我們將K230的IP配置到與PC同一子網下。
最后我們將PC端的防火墻關閉,開啟防火墻可能會傳輸信息失敗。
準備好上述工作后,我們就可以打開我們的網絡助手,網絡選擇我們PC的IP地址。
代碼運行后,就進行連接,連接成功后,就會向PC發送信息。在網路助手中也能清晰看到信息。
【學習k230 - 例程19】網絡例程TCP-Client