请教一下RTT的网络功能
udp (169.254.100.188, 8308) <-- (169.254.100.18, 1399)pcb (0.0.0.0, 8308) --- (0.0.0.0, 0)
udp_input: calculating checksum
tcp_slowtmr: processing active pcb
udp_input: received datagram of length 16
UDP header:
+-------------------------------+
| 1399 | 8308 | (src port, dest port)
+-------------------------------+
| 16 | 0x21eb | (len, chksum)
+-------------------------------+
udp (169.254.100.188, 8308) <-- (169.254.100.18, 1399)
pcb (0.0.0.0, 8308) --- (0.0.0.0, 0)
udp_input: calculating checksum
tcp_slowtmr: processing active pcb
udp_input: received datagram of length 16
UDP header:
+-------------------------------+
| 1399 | 8308 | (src port, dest port)
+-------------------------------+
| 16 | 0x21eb | (len, chksum)
+-------------------------------+
udp (169.254.100.188, 8308) <-- (169.254.100.18, 1399)
pcb (0.0.0.0, 8308) --- (0.0.0.0, 0)
udp_input: calculating checksum
tcp_slowtmr: processing active pcb 《----------这里收不到网络数据了。。有谁出现过这问题的吗
tcp_slowtmr: polling application
tcp_slowtmr: processing active pcb
tcp_slowtmr: processing active pcb
tcp_slowtmr: processing active pcb
tcp_slowtmr: processing active pcb
tcp_slowtmr: polling application
tcp_slowtmr: processing active pcb
tcp_slowtmr: processing active pcb
tcp_slowtmr: processing active pcb
tcp_slowtmr: processing active pcb
tcp_slowtmr: polling application 不太看得懂你的过程,你有用wiresharp在以太网上抓个包看看吗? 是这样的。系统启动后就开了一个线程做UDP服务器开始是正常的数据收发速度快时就会出现发不到数据之后都会不行,网络抓包都没抓到它发出来的数据。 void start_udpserv(void* paramemter)
{
int ret;
int udpsock;
int bytes_read;
unsigned int timeout;
char *recv_data;
unsigned char send_bytes;
struct sockaddr_in server_addr, client_addr;
rt_uint32_t addr_len;
fd_set readset;
timeout=1;
/* 分配接收用的数据缓冲 */
recv_data = rt_malloc(1024);
if (recv_data == RT_NULL)
{
/* 分配内存失败,返回 */
rt_kprintf("No memory\n");
return;
}
/* 创建一个socket,类型是SOCK_DGRAM,UDP类型 */
if ((udpsock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
rt_kprintf("Socket error\n");
/* 释放接收用的数据缓冲 */
rt_free(recv_data);
return;
}
lwip_setsockopt(udpsock, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
/* 初始化服务端地址 */
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PARA.PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
rt_memset(&(server_addr.sin_zero),0, sizeof(server_addr.sin_zero));
/* 绑定socket到服务端地址 */
if (bind(udpsock,(struct sockaddr *)&server_addr,
sizeof(struct sockaddr)) == -1)
{
/* 绑定地址失败 */
rt_kprintf("Bind error\n");
/* 释放接收用的数据缓冲 */
rt_free(recv_data);
return;
}
rt_kprintf("UDPServer Waiting for client on port %d...\n",PARA.PORT);
while (true)
{
addr_len = sizeof(struct sockaddr);
FD_ZERO(&readset);
FD_SET(udpsock, &readset);
if( lwip_select(udpsock+1, &readset, 0, 0, 0) == 0 )
continue;
rt_mutex_take(&setup_data_buf_mutex,RT_WAITING_FOREVER);
/* 从sock中收取最大1024字节数据 */
bytes_read = recvfrom(udpsock, recv_data, 1024, 0,
(struct sockaddr *)&client_addr, &addr_len);
/* UDP不同于TCP,它基本不会出现收取的数据失败的情况,除非设置了超时等待 */
rt_mutex_release(&setup_data_buf_mutex);
// rt_kprintf("udp server timeout!\n");
//
if(bytes_read>0)
{
IWDG_ReloadCounter();
recv_data = '\0'; /* 把末端清零 */
if(PARA.LED_Mode ==2)
{
LED_Ctr(1);
}
rt_mutex_take(&setup_data_buf_mutex,RT_WAITING_FOREVER);
send_bytes = eth_data_handle(recv_data,bytes_read,SendBuffer); //数据处理
rt_mutex_release(&setup_data_buf_mutex);
if(send_bytes>=5)
{
// client_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
rt_mutex_take(&setup_data_buf_mutex,RT_WAITING_FOREVER);
sendto(udpsock, SendBuffer, send_bytes, 0,(struct sockaddr *)&client_addr, sizeof(struct sockaddr));
rt_mutex_release(&setup_data_buf_mutex);
// rt_kprintf("send data %s: ",SendBuffer);
// rt_thread_delay(1);
}
/* 输出接收的数据 */
if(PARA.LED_Mode ==2)
{
LED_Ctr(0);
}
}
// rt_thread_delay(1);
}
lwip_close(udpsock);
/* 释放接收用的数据缓冲 */
rt_free(recv_data);
rt_kprintf("udp server error!\n");
return;
}
把例程改为这样子。eth_data_handle(recv_data,bytes_read,SendBuffer); //数据处理
这函数是数据处理的
这样有什么问题吗
页:
[1]