硬汉嵌入式论坛

 找回密码
 立即注册
查看: 125|回复: 5
收起左侧

[网络知识] TCP通信中SSDP协议怎么用W5500接收

[复制链接]

16

主题

33

回帖

81

积分

初级会员

努力做,耐心等

积分
81
发表于 3 天前 | 显示全部楼层 |阅读模式
我想要完成一个功能,设备端和电脑端通过网线相连,我的设备端是W5500+STM32,电脑端IP地址是自动获取的,我想让设备端知道电脑端的IP地址,我用wireshark监测了一下,看到了电脑端会发SSDP这个指令,如图,这里的169.254.100.170就是电脑端的IP地址,那么我想只要我的W5500能接收到这个SSDP协议,就可以知道电脑端的地址了?
1.png
回复

使用道具 举报

6

主题

247

回帖

265

积分

高级会员

积分
265
发表于 3 天前 | 显示全部楼层
SSDP使用的是UDP协议,监听1900端口就行了吧?W5500是可以实现的,如果不行的话就用通道0,直接读取MAC底层数据
回复

使用道具 举报

16

主题

33

回帖

81

积分

初级会员

努力做,耐心等

积分
81
 楼主| 发表于 前天 09:31 | 显示全部楼层
fxyc87 发表于 2025-5-11 16:43
SSDP使用的是UDP协议,监听1900端口就行了吧?W5500是可以实现的,如果不行的话就用通道0,直接读取MAC底层 ...

是不是可以用UDP协议,远端地址设置为255.255.255.255就能全部接收啊?
回复

使用道具 举报

9

主题

62

回帖

104

积分

初级会员

积分
104
发表于 前天 11:43 | 显示全部楼层
W5500能做dhcp服务器吗?不然PC自动获取不到什么IP的,会默认用个169.254。网线直连的这种就约定好大家各自使用固定的IP,不要自动获取。
回复

使用道具 举报

6

主题

247

回帖

265

积分

高级会员

积分
265
发表于 前天 12:25 | 显示全部楼层
chenweigang 发表于 2025-5-12 09:31
是不是可以用UDP协议,远端地址设置为255.255.255.255就能全部接收啊?

udp下不需要设置远程IP,只在端口监听了,就能接收,发送时需要配置IP
回复

使用道具 举报

16

主题

33

回帖

81

积分

初级会员

努力做,耐心等

积分
81
 楼主| 发表于 昨天 15:34 | 显示全部楼层
fxyc87 发表于 2025-5-12 12:25
udp下不需要设置远程IP,只在端口监听了,就能接收,发送时需要配置IP

我看这个接收recvfrom函数是需要IP地址?
void do_udp(void)
{                                                              
        uint16 len=0;
        uint8 buff[2048];                                                          /*定义一个2KB的缓存*/       
        switch(getSn_SR(SOCK_UDPS))                                                /*获取socket的状态*/
        {
                case SOCK_CLOSED:                                                        /*socket处于关闭状态*/
                        socket(SOCK_UDPS,Sn_MR_UDP,local_port,0);                              /*初始化socket*/
                  break;
               
                case SOCK_UDP:                                                           /*socket初始化完成*/
                        delay_ms(10);
                        if(getSn_IR(SOCK_UDPS) & Sn_IR_RECV)
                        {
                                setSn_IR(SOCK_UDPS, Sn_IR_RECV);                                     /*清接收中断*/
                        }
                        if((len=getSn_RX_RSR(SOCK_UDPS))>0)                                    /*接收到数据*/
                        {
                                recvfrom(SOCK_UDPS,buff, len, remote_ip,&remote_port);               /*W5500接收计算机发送来的数据*/
                                buff[len-8]=0x00;                                                    /*添加字符串结束符*/
                                printf("%s\r\n",buff);                                               /*打印接收缓存*/
                                sendto(SOCK_UDPS,buff,len-8, remote_ip, remote_port);                /*W5500把接收到的数据发送给Remote*/
                        }
                        break;
        }

}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-14 23:30 , Processed in 0.225860 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表