paulkiyt 发表于 2018-3-1 19:10:35

STM32如何通过路由器和PC进行以太网通讯


参考DHCP例程,路由器给开发板分配IP地址,目前已经OK
DHCP state       : SELECTING
DHCP state       : REQUESTING
DHCP state       : CHECKING
DHCP state       : BOUND
IPv4 Address   : 192.168.1.2
IPv4 Subnet mask : 255.255.255.0
IPv4 Gateway   : 192.168.1.1
现在想把PC通过网线也接到路由器,让路由器也分配一个地址,然后开发板通过分配的地址往PC发数据?请问这个如何实现?MCU怎么知道PC的IP?






nyszx 发表于 2018-3-1 21:05:58

楼主要先学习下以太网相关知识,就知道该怎么做了,如果使用DHCP,动态获取IP,那如果需要建立TCP通信,那在事先约定好端口的情况下,主机必须先用UDP广播自己的IP地址,告诉从机那个地址可以连接,从机监听到后再去建立连接。

Angel_YY 发表于 2018-3-1 21:49:20

可以首先获取pc的MAC地址,在开发板端记录这个地址,开发板启动时发送RARP包,请求PC的MAC所对应的IP地址,路由器接收到RARP包后会返回给开发板该MAC地址所对应的IP地址,开发板就可以通过PC机的IP地址进行通讯了。
开发板和PC之间进行网络通讯,如果两者都是DHCP分配的IP地址,那么只能通过固定的MAC地址进行IP地址解析后通讯。
另ARP是IP地址解析为MAC地址,RARP是MAC地址解析为IP地址。

maxtch 发表于 2018-3-1 21:50:18

如果 PC 是固定 IP,你可以把地址直接编码到程序里面,或者做成一个配置项。要不然你就需要用某种地址解析协议了。楼上所说的 UDP 广播其实不太可取,节点多了容易广播风暴。我的建议是你可以看一下 Bonjour 是怎么做的,甚至可以考虑直接做 Bonjour 协议。电脑端 Bonjour 是跨平台的:Windows 和 macOS 可以用苹果的 Bonjour 软件,Linux 下则有 Avahi。

wudianjun2001 发表于 2018-3-2 08:20:05

必须先有端口地址和IP地址才能进行通讯的,无论是TCP还是UDP都需要这两个东西,IP地址不是固定的话,那可以 通过MAC地址来获取IP,因为MAC地址是唯一的

zense 发表于 2018-3-2 13:00:35

学习了.mark

wofei1314 发表于 2018-3-2 13:34:53

简单的话还是直接Socket通信,可以尝试使用UDP广播,和2楼想法一样,把通信信息广播出来,接收保存,然后再用这个信息来连接

nyszx 发表于 2018-3-2 15:51:59

我觉得楼主想要表达的意思就是,局域网中任意两台自动获取IP地址的网络设备能够建立点对点通信。不知理解是否正确。也就是事先IP不知道,Mac不知道的情况下实现点对点通信。如果使用RARP,实现RARP有点复杂了吧,还需要建立RARP服务器,而且通过RAPR服务器得到的IP,也不一定是期望的连接IP,因为还有其他可能的设备。UDP广播风暴在这里有点夸张了吧,又不是一直发UDP,而且也只有做主机的才发送,从机只监听约定好的端口,广播的UDP数据包含:约定的设备识别信息,如IP地址、服务端口,支持的功能等内容,从机接收到,就可以进行判断是否需要进行连接通信。UDP广播只需要端口就可以了,广播时地址为255.255.255.255。我说的这个方法绝对能满足楼主要求。还有个不推荐的笨办法就是,从1连接到254,一个一个试,但是有多个主机就麻烦了。

无薪税绵 发表于 2018-3-5 13:33:42

最简单的办法就是,
你通过开发板,通过UDP向PC广播发送一组特定的数据,
然后PC中,监听特定的端口和特定的数据,
如果发现数据,马上返回握手信号,
这样就实现了通信同步了。
然后剩下的就由你来发挥了。

具体实现,必须要有相关TCP-IP的基础才行。

付:TCP-IP详解_卷1:协议.pdf


全套书箱分三卷,在入门后,请自行百度其它二卷。

呵呵平平淡淡 发表于 2018-8-18 11:54:33

谢谢分享
页: [1] 2
查看完整版本: STM32如何通过路由器和PC进行以太网通讯