OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9389|回复: 8

我用LWIP 协议栈的SOCKET使板子做TCP服务器,断线后不能重连了

[复制链接]

31

主题

130

帖子

0

精华

高级会员

Rank: 4

积分
790
金钱
790
注册时间
2015-6-28
在线时间
139 小时
发表于 2016-5-4 23:13:49 | 显示全部楼层 |阅读模式
1金钱
本来是先开一个的,后面接着开第二个,但是后面如果断开了连接之后,就连不上了。

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

130

帖子

0

精华

高级会员

Rank: 4

积分
790
金钱
790
注册时间
2015-6-28
在线时间
139 小时
 楼主| 发表于 2016-5-4 23:13:50 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165426
金钱
165426
注册时间
2010-12-1
在线时间
2113 小时
发表于 2016-5-7 23:07:25 | 显示全部楼层
不到
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2016-5-8 14:10:36 | 显示全部楼层
建议板子做服务器的话使用短链接,
另外给你一个代码,自己研究下,不过我这是板子做客户端的,短线重连
[mw_shl_code=c,true]        IP4_ADDR(&server_ipaddr,192,168,2,100);
       
        while(1)
        {
                tcp_clientconn = netconn_new(NETCONN_TCP);
                netconn_bind(tcp_clientconn , IP_ADDR_ANY , 1026+i);
                err = netconn_connect(tcp_clientconn,&server_ipaddr,8080);
                tcp_clientconn->recv_timeout = 10;                                                                                        //½ÓÊÕ³¬Ê±Ê±¼ä10ms
               
                if(err != ERR_OK)  
                {
                        netconn_close( tcp_clientconn );
                        netconn_delete(tcp_clientconn);
                }
                else if (err == ERR_OK)
                {
                        while(ESTABLISHED == tcp_clientconn->pcb.tcp->state)                                                                        //Õý³£Á¬½ÓºóÈÎÎñ¹ÒÆð
                        {
                                ClientTXHandle(tcp_clientconn);
                                ClientRXHandle(tcp_clientconn);
                        }

                        netconn_close( tcp_clientconn );
                        netconn_delete(tcp_clientconn);
                }
               
                vTaskDelay(10/portTICK_RATE_MS);
        }[/mw_shl_code]
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复

使用道具 举报

31

主题

130

帖子

0

精华

高级会员

Rank: 4

积分
790
金钱
790
注册时间
2015-6-28
在线时间
139 小时
 楼主| 发表于 2016-5-8 15:12:17 | 显示全部楼层
xsx127 发表于 2016-5-8 14:10
建议板子做服务器的话使用短链接,
另外给你一个代码,自己研究下,不过我这是板子做客户端的,短线重连
...

我现在也是短连接的。只不过呢,现情况是这样。我连接上了,如果发生意外断开,那么后面客户端就连不上板子了
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2016-5-8 15:46:03 | 显示全部楼层
可以上代码帮你看看
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复

使用道具 举报

31

主题

130

帖子

0

精华

高级会员

Rank: 4

积分
790
金钱
790
注册时间
2015-6-28
在线时间
139 小时
 楼主| 发表于 2016-5-8 22:59:27 | 显示全部楼层

本帖最后由 黑猫 于 2016-5-8 23:03 编辑
xsx127 发表于 2016-5-8 15:46
可以上代码帮你看看

我之前是用socket的,现在用netconn类型的,我改了部分原子的例程,没成功。[mw_shl_code=c,true]        conn = netconn_new(NETCONN_TCP);
        netconn_bind(conn,IP_ADDR_ANY,TCP_SERVER_PORT);
        netconn_listen(conn);
       
        conn1 = netconn_new(NETCONN_TCP);
        netconn_bind(conn1,IP_ADDR_ANY,8080);
        netconn_listen(conn1);
       
        conn->recv_timeout = 10;
  conn1->recv_timeout = 10;
        memset(test_buff,0x50,1024);
        while (1)
        {
                err = netconn_accept(conn,&newconn);
                if(err==ERR_OK)
                        newconn->recv_timeout = 10;

                err = netconn_accept(conn1,&newconn1);
                if(err==ERR_OK)
                        newconn1->recv_timeout = 10;
               
                if (err == ERR_OK)    //′|àíDÂᬽóμÄêy¾Y
                {
                        struct netbuf *recvbuf;

                        netconn_getaddr(newconn,&ipaddr,&port,0);
                        printf("%d",port);
                        remot_addr[3] = (uint8_t)(ipaddr.addr >> 24);
                        remot_addr[2] = (uint8_t)(ipaddr.addr>> 16);
                        remot_addr[1] = (uint8_t)(ipaddr.addr >> 8);
                        remot_addr[0] = (uint8_t)(ipaddr.addr);
                        tcp_server_flag |= LWIP_SEND_DATA;
                        while(1)
                        {

                                if(1){
                                        err = netconn_write(newconn ,tcp_server_sendbuf,strlen((char*)tcp_server_sendbuf),NETCONN_COPY);
//现在在这里一直发送失败,newconn 调试发现是0

}[/mw_shl_code]
回复

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2016-5-9 10:23:04 | 显示全部楼层
知道为什么断了就连不上了吗,你2个server都在等待客户端接入,netconn_accept阻塞的,你把2个服务器分别放到2个任务里面去就好了
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复

使用道具 举报

31

主题

130

帖子

0

精华

高级会员

Rank: 4

积分
790
金钱
790
注册时间
2015-6-28
在线时间
139 小时
 楼主| 发表于 2016-5-9 12:24:35 | 显示全部楼层
xsx127 发表于 2016-5-9 10:23
知道为什么断了就连不上了吗,你2个server都在等待客户端接入,netconn_accept阻塞的,你把2个服务器分别放 ...

方便加个好友吗。假如不开两个任务,我是否可以这样,先开一个server,端口A,然后等待连接,连接上之后做一些事情,假如在做这些事情的期间,有需要用到再开一个端口B。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-9 01:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表