2876|4

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【ZLG/IP】LM3S8962以太网通信UDP无法发送数据 [复制链接]

实在没办法了求有过经验的朋友帮帮忙,这个双休日简直煎熬啊搞不粗来!!
下面是周公uCOS+UDP通讯的例程中的两个核心任务,并且我已经测试成功,【可以发送和接收】!!
但是这里的发送数据是将接收到的数据返回serv端,
而我需要的是【单独发送我想发送的数据】。
那我就想把recvfrom()去掉不就行了,可是【总是发送不出去啊】!!!
而且加了我改的发送任务后,连这个接收任务也无法执行了。。。
不知道问题所在,求高手解答,谢谢了!!!
周公的TCP/IP协议栈的socket API介绍:http://www.docin.com/p-57998041.html
周公的TCP/IP协议栈的实现过程:http://blog.chinaunix.net/uid-27 ... 1a374a433f596ad1440
【上面两个链接,没有用过ZLG/IP的朋友看下可以帮助理解下面的代码,以便更快解决我的问题】

/*********************************************************************************************************
** Function name:         TaskB
** Descriptions:          等待UDP的信号量
** input parameters:      无
** output parameters:     无
** Returned value:        无
*********************************************************************************************************/
void TaskB (void  *pdata)
{
    void *  UdpTemp;
    uint8   eer;   
   
    while (1) {
            UdpTemp = OSQPend(RecUdpQFlag, 0, &eer);
        if (eer == OS_NO_ERR) {
                    Udp_Process((Rec_Ptr *)UdpTemp);
                    eer = eer;
            }
    }   
}

/*********************************************************************************************************
** Function name:         TaskD
** Descriptions:          UDP协议数据接收和发送任务
** input parameters:      无
** output parameters:     无
** Returned value:        无
*********************************************************************************************************/
void TaskD (void  *pdata)
{
    uint8   rec_buffer[100];                                                                            /*  发送缓存区                  */
    SOCKET        s;
    int     rec_coute, send_coute;
    uint16  iii;
    struct sockaddr servaddr, clientaddr;
        OSTimeDly(60);
        servaddr.sin_family  = 0;                                                                                        /*  设置客户机IP地址            */
        servaddr.sin_addr[0] = 192;
        servaddr.sin_addr[1] = 168;
        servaddr.sin_addr[2] = 0;
        servaddr.sin_addr[3] = 55;
        servaddr.sin_port    = 1026;                                                                                  /*  设置服务器端口号            */
        s=*socket(0, SOCK_DGRAM, UDP_PROTOCOL);                                                        /*  建立SOCKET                  */
        clientaddr.sin_family = 0;
        clientaddr.sin_addr[0] = NetPort[0].My_Ip[0];                                            /*  设置本地IP地址              */
        clientaddr.sin_addr[1] = NetPort[0].My_Ip[1];
        clientaddr.sin_addr[2] = NetPort[0].My_Ip[2];
        clientaddr.sin_addr[3] = NetPort[0].My_Ip[3];
        clientaddr.sin_port = 1025;                                                                                  /*  设置本地监听端口号          */
        iii = bind((SOCKET * ) & s, (struct sockaddr *) & clientaddr, sizeof(clientaddr));       
                                                                                                                                             /*  绑定服务器地址              */
        while (1) {
                rec_coute=recvfrom( s, rec_buffer, 100, 0, (struct sockaddr *) & servaddr, &iii );        
                                                                                                                                            /*  接受数据                    */
                if(rec_coute > 0) {
                           send_coute = sendto(s, rec_buffer, rec_coute, 0,
                               (struct sockaddr *) & servaddr,
                                sizeof(servaddr) );
                                                                                                                                            /*  把接受的数据返回            */                       
                        send_coute = send_coute;                                                                        /*  防止编译警告                */
                }
        }   
}

最新回复

肯定有端口号设置,不然的话,怎么测试 TCP 和 UDP  呢?  详情 回复 发表于 2014-10-28 08:49
 
点赞 关注(1)

回复
举报

7

帖子

0

TA的资源

一粒金砂(中级)

推荐
 
Study_Stellaris 发表于 2014-10-20 10:02
recvfrom() 你可以再好好分析一下,这个函数里边可能不只是简单的接收数据。

你好!recvfrom和sendto我都已经看的很仔细了,如果只是发送数据的话,只调用sendto理论上应该是没有问题的。
我猜想是否有这种可能:
因为测试时我用的是一款叫做【TCP&UDP测试工具】的测试软件,
那如果我要从板子发送数据到电脑,电脑端应该有相应的设置好的侦听端口才可以接收到数据。
而我使用的这个测试工具则没有这样的功能。
有没有这种可能性呢?

点评

肯定有端口号设置,不然的话,怎么测试 TCP 和 UDP 呢?  详情 回复 发表于 2014-10-28 08:49
TCP/UDP 测试工具不能设端口号?不会吧。再说你不是测试原程序都成功了吗? 估计还是sendto不能这么直接用  详情 回复 发表于 2014-10-22 00:11
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 
recvfrom() 你可以再好好分析一下,这个函数里边可能不只是简单的接收数据。

点评

你好!recvfrom和sendto我都已经看的很仔细了,如果只是发送数据的话,只调用sendto理论上应该是没有问题的。 我猜想是否有这种可能: 因为测试时我用的是一款叫做【TCP&UDP测试工具】的测试软件, 那如果我要从  详情 回复 发表于 2014-10-20 12:03
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(中级)

4
 
ssuperliang 发表于 2014-10-20 12:03
你好!recvfrom和sendto我都已经看的很仔细了,如果只是发送数据的话,只调用sendto理论上应该是没有问题 ...

TCP/UDP 测试工具不能设端口号?不会吧。再说你不是测试原程序都成功了吗?
估计还是sendto不能这么直接用
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

5
 
ssuperliang 发表于 2014-10-20 12:03
你好!recvfrom和sendto我都已经看的很仔细了,如果只是发送数据的话,只调用sendto理论上应该是没有问题 ...

肯定有端口号设置,不然的话,怎么测试 TCP 和 UDP  呢?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【干货上新】电源解决方案和技术第二趴 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 7

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表