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和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
def 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)
return
for 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