zxq6 发表于 2011-10-3 14:06:08

请问版主,我用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线程并不受影响。

zxq6 发表于 2011-10-3 15:09:38

偶然间发现,是因为内存耗尽导致的无响应。继续分析中。。。

zxq6 发表于 2011-10-6 11:24:42

调试发现,必须要在TCP处理循环里面将内存释放掉才可以。
即加入如下代码
netbuf_delete(inbuf);

调试中。。。

aureoleday 发表于 2011-11-24 14:21:57

楼主,问题解决了?我也出现了几乎相同的问题。

wangwj 发表于 2011-11-25 10:58:43

你的程序里不是有释放内存代码吗?
页: [1]
查看完整版本: 请问版主,我用RTT建立了一个TCP服务器,为什么当客户机发送70多K的数据过去后,服务器就