初级会员

- 积分
- 79
- 金钱
- 79
- 注册时间
- 2018-4-6
- 在线时间
- 19 小时
|
10金钱
本帖最后由 诺帝卡 于 2020-8-30 11:32 编辑
void Tcp_Penetrate_SenData(u8 *buf,u8 num)
{
struct tcp_pcb *tpcb;
tcp_write(tpcb,buf,num,TCP_WRITE_FLAG_COPY); // payload为TCP数据块的起始位置
tcp_output(tpcb); //发送数据出去
}
目前使用这个函数发送不出去,电脑客户端显示不了数据
static err_t tcp_server_recv(void *arg, struct tcp_pcb *pcb,struct pbuf *p,err_t err)
{
u16 length;
if(p != NULL)
{
length =p->len; //这里取到的Length即为收到的数据长度
G_TcpData.data_size=length;
memcpy((void*)&(G_TcpData.data),p->payload,length);
tcp_recved(pcb, p->tot_len); //获取数据长度 tot_len:tcp数据块的长度
/******将数据原样返回*******************/
//tcp_write这个函数其实是将你的数据放到一个队列,再调用tcp_output发送出去
tcp_write(pcb,p->payload,p->tot_len,TCP_WRITE_FLAG_COPY); // payload为TCP数据块的起始位置
tcp_output(pcb); //发送数据出去
}
else
{
tcp_close(pcb); /* 作为TCP服务器不应主动关闭这个连接? */
}
pbuf_free(p); /* 释放该TCP段 */
err = ERR_OK;
return err;
}
这个回调函数,我从电脑客户端发送数据给单片机就有数据返回,请问如果我要实现服务端主动发送数据给客户端要怎么实现呢?
|
最佳答案
查看完整内容[请看2#楼]
客户端连接服务器的时候要把连接的句柄记录下来,发送的时候要指定连接发送,你写的发送函数中连接句柄是个野指针,无法发送数据
|