硬汉嵌入式论坛

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

[RL-TCPnet] RL-TCPnet BSD UDP

[复制链接]

11

主题

68

回帖

101

积分

初级会员

积分
101
发表于 2019-10-14 14:44:36 | 显示全部楼层 |阅读模式

使用RL-TCPnet 之 BSD Socket 客户端的代码修改而来,原来是TCP,现改为UDP,代码如下,连接远程服务器能够成功,可是接收函数却提示无效的socket号,不知道是什么原因

{  
//        int len;
        int sock, res;
    uint8_t ip[4];
        SOCKADDR_IN addr;
    char rBuf[128];
       
        while (1)
        {
                /* 创建一个socket
                   第1个参数AF_INET:当前仅支持这个类型的地址族。
                   第2个参数SOCK_DGRAM:表示数据流通信类型,即使用的UDP。
                   第3个参数0 :配置为0的话,自动跟第2个参数进行协议匹配,这里就是UDP协议。
                */
                sock = socket (AF_INET, SOCK_DGRAM, 0);

                /* 端口号设置为1001 */
                addr.sin_port = htons(atoi((char *)para_t.port3));
               
                /* 与函数socket中的AF_INET作用一样 */
                addr.sin_family = PF_INET;
               
        bps_user_lib_ip_asc_int(ip, para_t.ip3, strlen((char *)para_t.ip3)) ;
                addr.sin_addr.s_b1 = ip[0];
                addr.sin_addr.s_b2 = ip[1];
                addr.sin_addr.s_b3 = ip[2];
                addr.sin_addr.s_b4 = ip[3];

                /* 客户端连接远程服务器,如果远程服务器还未创建,此函数会立即返回 */
                res = connect (sock, (SOCKADDR *)&addr, sizeof (addr));
                printf("客户端连接远程服务器状态%s\r\n", ReVal_Table[abs(res)]);

                while (1)
                {
                        res = recv (sock, rBuf, sizeof(rBuf), 0);
                        if (res > 0)
                        {
                bsp_user_lib_printf_hex("net",(uint8_t *)rBuf,res);
                res = send (sock, (char *)rBuf, res, 0);
                if (res < 0)
                {
                    printf("函数send发送数据失败%s\r\n", ReVal_Table[abs(res)]);
                }
                else
                {
                    printf("函数send成功发送数据 = %d字节\r\n", res);                                                       
                }
                        }
                        else
                        {
                if((res == SCK_EINVALID) || (res == SCK_ECLOSED))
                {
                    printf("客户端:%d 接收函数返回状态%s\r\n", sock,ReVal_Table[abs(res)]);
                    break;
                }
                        }
                }
               
                /*
                   远程服务器断开连接和sock句柄无效,程序都会执行到这里,我们在这里关闭socket,
                   程序返回到第一个大while循环的开头重新创建socket并连接。
                */
                closesocket (sock);

        os_dly_wait(30000);
        }
}

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2019-10-14 15:19:51 | 显示全部楼层
看程序,没啥问题。
测试下原始Socket方式的UDP,看看你的工程正常不。
回复

使用道具 举报

11

主题

68

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2019-10-14 15:40:54 | 显示全部楼层
eric2013 发表于 2019-10-14 15:19
看程序,没啥问题。
测试下原始Socket方式的UDP,看看你的工程正常不。

Eric2013,您好!
      我刚测试了最原始的UDP,收发都正常
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2019-10-14 15:55:32 | 显示全部楼层
ymh792260950 发表于 2019-10-14 15:40
Eric2013,您好!
      我刚测试了最原始的UDP,收发都正常

那就没问题了,估计还是哪里设置好的问题,多试试。
最近我在弄新版RL-TCPnet v7.x的教程了,届时BSD的TCP和UDP全做了,分享代码给大家。

回复

使用道具 举报

11

主题

68

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2019-10-14 15:58:15 | 显示全部楼层
附件为俩者的对比信息

RL-TCPnet BSD UDP对比.doc

93 KB, 下载次数: 8

回复

使用道具 举报

11

主题

68

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2019-10-14 16:06:33 | 显示全部楼层
eric2013 发表于 2019-10-14 15:55
那就没问题了,估计还是哪里设置好的问题,多试试。
最近我在弄新版RL-TCPnet v7.x的教程了,届时BSD的T ...

V7.x的,确实盼望好久了
回复

使用道具 举报

11

主题

68

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2019-10-14 16:07:13 | 显示全部楼层
带附件是不是传不了呢,再上传一下

RL-TCPnet BSD UDP对比.doc

93 KB, 下载次数: 6

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2019-10-14 17:03:44 | 显示全部楼层
ymh792260950 发表于 2019-10-14 16:07
带附件是不是传不了呢,再上传一下

这个好弄,后面我分享例子给大家
回复

使用道具 举报

11

主题

68

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2019-10-14 17:53:07 | 显示全部楼层
eric2013 发表于 2019-10-14 17:03
这个好弄,后面我分享例子给大家

发送正常,就是接收返回值为-2,有空测试下,搞一天了,看了好多资料,没找到原因,明天继续。。。
回复

使用道具 举报

11

主题

68

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2019-10-15 10:21:38 | 显示全部楼层
eric2013 发表于 2019-10-14 17:03
这个好弄,后面我分享例子给大家

ppp connect successful
017.7 UDP:Socket 1 allocated
017.7 BSD:Socket 1 allocated
017.7 BSD: Type SOCK_DGRAM
017.7 BSD:Connect Socket 1
017.7 UDP:Open Socket 1, LocPort 0
017.7 UDP: LocPort 1024 assigned
017.7 BSD: Dgram socket 1 connected
客户端连接远程服务器状态 0: SCK_SUCCESS       Success                             
017.7 BSD:Send/to Socket 1
017.7 UDP:Send Socket 1, 12 bytes
017.7 UDP: Src. Port: 1024
017.7 UDP: Dest.Port: 7240
017.7 UDP: Checksum : 0xAA00
017.7 UDP: Length   : 20 bytes
017.7 BSD: Sent 12 bytes
027.7 BSD:Recv/from Socket 1
027.7 BSD-ERR:Recv, Socket 1 wrong state
客户端:1 接收函数返回状态-2: SCK_EINVALID      Invalid socket descriptor           
027.7 BSD:Closesocket 1
027.7 UDP:Close Socket 1
027.7 UDP:Release Socket 1
回复

使用道具 举报

11

主题

68

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2019-10-19 21:47:32 | 显示全部楼层
eric2013 发表于 2019-10-14 17:03
这个好弄,后面我分享例子给大家

Eric2013,您好!
      这些天找了很多资料,还是没有整明白mdk474 RL-TCPnet BSD UDP接收的问题,您有计划测试下,然后增加这个例程不,我手上用的是V5的开发板
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2019-10-20 09:14:32 | 显示全部楼层
ymh792260950 发表于 2019-10-19 21:47
Eric2013,您好!
      这些天找了很多资料,还是没有整明白mdk474 RL-TCPnet BSD UDP接收的问题,您有计 ...

最近没有。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 21:56 , Processed in 0.199655 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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