-
LZ这个找到解决方案了么,我也在纳闷,为啥不行。
-
我X,这个跟我的做法一样了,我自己想的。
-
怎么能免费申请?
-
有些函数是看不懂的啊,没个资料介绍的
-
咋没见传上来
-
我是在问如何做?我想这么大的协议肯定可以的了,关键是如何做呢?我还在调试看看,看你们有什么好的建议或者经验的?
-
在UDP中只要申请一个空间就可以发送除去,如下:
p = pbuf_alloc(PBUF_RAW,sizeof(UDPData),PBUF_RAM);
p->payload=(void *)UDPData;
udp_send(Pcb1,p);
换到TCP中这种做法是行不通,但可以在接收函数tcp_recv()的回调函数中直接调用tcp_write()函数发送出去,而我想是想在一个的独立函数就可以发送数据,这样的做法可以实现吗?答案应该是可以的吧
-
那如何弄呢?请给点指示
-
我发现没人来解答了。。。
-
//当数据被正确发送到远程主机后(收到ACK),该函数会被调用。
static err_t
App_sent(void *arg, struct tcp_pcb *pcb, u16_t len)
{
LWIP_UNUSED_ARG(len);
if(!arg) {
return ERR_OK;
}
tcp_arg(pcb, NULL);
tcp_sent(pcb, NULL);
tcp_recv(pcb, NULL);
mem_free(arg);
tcp_close(pcb);
return ERR_OK;
}
在这中,我有个问题。为什么发送到远程主机后,要关掉连接tcp_close(pcb);这样子的话只能发送一次,再发送的话,还得重新建立。为何要关掉?
-
谢谢
-
就是用Keil 注册机来弄的
-
CKCWS-A90SA是本机电脑的CID,因为限制下载不了注册机,所以求助!
-
对i的例子可以调出来了,虽然是出来了,但看了中断程序,我一直不解。中断函数里只有stellarisif_interrupt(&lwip_netif);
我继续往下找stellarisif_interrupt里面的函数,里面有接收有传输的函数,我是大概了解意思了。但跟udp_recv之间的联系在哪里,或者在哪调用到了,都没发现。还有自己编写的那个函数APP_recv_udp,我知道肯定是被用到了,是用在udp_recv被指定数据接收。但都跟中断函数没有关联,这句好话说的有点生硬,我是没找出破绽,你可以解释一下。
-
tcp_recv(pcb,App_recv);
tcp_recv()本身不是实际处理接收数据的函数,它需要指定一个应用层的接收数据函数(这里假如为App_recv,需要自己依据应用来编写)来处理接收到的数据。
p->payload字段中存储了数据。数据存放在这里。
处理完了之后要pbuf_free(p);
app_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
第一步:申明一个结构体,此结构体表征应用程的一些状态。
第二步:将回调函数的参数的指针arg赋值给该结构体。
第三步:调用tcp_recved(pcb, p->tot_len);确认数据的接受,其中包括了更新接收窗口。
第四步:对接收到的p->payload字段中数据进行提取,保存或其发送等等其它处理。
第五步:释放pbuf占用的rx buffer, pbuf_free(p);
第六步:tcp_sent(pcb, App_sent
这些同样适用于udp_recv函数,对吧?
-
Systick这个中断不是必须的,我把它删掉后,同样可以发送接收。为何要呢?请解释。
-
你再看看,你的目标也是让人看懂让人学会,这一点是毋庸置疑的,现在是这一个函数,那一个函数,调来调去的,你自己的东西当然能懂,但传给别人并不一定能接受,所以说我也只是按你的实践了一遍发现有问题才提出来的,你能把整个工程都传的话,就无需那么多解释了。
-
你再看看这个不是你例子中的中断函数,要是这个的话,你的数据怎么接收的,udp_recv,APP_recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p,
struct ip_addr *addr, u16_t port),这些都没看到调用。要不你把你的这个工程都传上来吧,我还能自己思考。把上面的UDP和TCP整个用到的全部都传上来岂不快乎
-
麻烦上传一下lwIPEthernetIntHandler这个中断原函数,你上传的工程里面是没有的,lwiplib.c里边怎么改动了你也没说。
-
所说的内存用完释放,我这有个问题
while(1)
{
p = pbuf_alloc(PBUF_RAW,sizeof(UDPData),PBUF_RAM);
p->payload=(void *)UDPData;
udp_send(Pcb1,p);
pbuf_free(p);
SysCtlDelay(SysCtlClockGet()/3);
}
我这样安排,按理说会一直的发送函数,但是只发了那么一会,在TCP&UDP测试工具上就没有显示了,也就是停止了发送,这怎么解释?