【ZLG/IP】LM3S8962以太网通信UDP无法发送数据

2019-03-24 10:48发布

实在没办法了求有过经验的朋友帮帮忙,这个双休日简直煎熬啊搞不粗来!!
下面是周公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;                                                                        /*  防止编译警告                */
                }
        }   
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
mangoal
2019-03-24 23:36
ssuperliang 发表于 2014-10-20 12:03
你好!recvfrom和sendto我都已经看的很仔细了,如果只是发送数据的话,只调用sendto理论上应该是没有问题 ...

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

一周热门 更多>

相关问题

    相关文章