请问版主,我用RTT建立了一个TCP服务器,为什么当客户机发送70多K的数据过去后,服务器就
服务器处理函数如下:/*这个函数处理进入的连接 */
static void process_tcp_connection(struct netconn *conn, unsigned long c)
{
struct netbuf *inbuf;
char *rq;
rt_uint16_t len;
while((inbuf = netconn_recv(conn)) != NULL)
{
netbuf_data(inbuf, (void**)&rq, &len);
if(netbuf_len(inbuf))
{
netconn_write(conn, "asdf", 4, NETCONN_COPY);
}
}
netbuf_delete(inbuf);
}
客户端发送的tcp数据包长度是1450,修改为20字节,发送到400多次的时候出现了相同的故障。
线程入口函数如下:
/* 线程入口 */
void lw_tcp_thread(void* paramter)
{
unsigned long ulCnt;
struct netconn *conn, *newconn;
/*建立一个新的TCP连接句柄 */
conn = netconn_new(NETCONN_TCP);
/*将连接绑定在任意的本地IP地址的80端口上 */
netconn_bind(conn, NULL, 1048);
/*连接进入监听状态 */
netconn_listen(conn);
ulCnt=1000000;
/*循环处理 */
while(1)
{
/*接受新的连接请求 */
//struct netbuf* buf;
newconn = netconn_accept(conn);
process_tcp_connection(newconn, ulCnt);
/*删除连接句柄 */
netconn_close(newconn);
netconn_delete(newconn);
}
}
怀疑可能是哪个地方的内存溢出,不过奇怪的是,有一个LED线程并不受影响。 偶然间发现,是因为内存耗尽导致的无响应。继续分析中。。。 调试发现,必须要在TCP处理循环里面将内存释放掉才可以。
即加入如下代码
netbuf_delete(inbuf);
调试中。。。 楼主,问题解决了?我也出现了几乎相同的问题。 你的程序里不是有释放内存代码吗?
页:
[1]