8650|12

8

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

TCP SERVER如何建立两个连接? [复制链接]

请教各位一个问题:
我在开发一个项目,基于STM32F107平台,加载FREERTOS及LWIP协议栈,目前实现了TCP SERVER功能,代码如下:
void TCPServer( void *arg )
{
int optval = 1;
u32_t len;
struct sockaddr_in Server_Local_addr,Client_Remote_addr;
fd_set fdsr;
struct timeval tv;
uint8_t i;

tv.tv_sec = 3;
tv.tv_usec = 0;

(void)arg;
xServerSocket.s = lwip_socket(AF_INET,SOCK_STREAM,0);
if(xServerSocket.s == -1 )
{
  return;
}
optval = 1;
  
lwip_setsockopt(xServerSocket.s,SOL_SOCKET,SO_REUSEADDR,&optval,sizeof(optval));
Server_Local_addr.sin_family = AF_INET;
Server_Local_addr.sin_port = htons(8800);
Server_Local_addr.sin_len = sizeof(Server_Local_addr);
Server_Local_addr.sin_addr.s_addr = INADDR_ANY;

if (lwip_bind(xServerSocket.s, (struct sockaddr *) &Server_Local_addr, sizeof(Server_Local_addr)) < 0)
{
  return ;
}
if (lwip_listen(xServerSocket.s, 10) == -1)
{
  return;
}
while(1)
{
  len = sizeof(Client_Remote_addr);
  xServerSocket.c = lwip_accept(xServerSocket.s, (struct sockaddr *)&Client_Remote_addr, &len);
  if(xServerSocket.c == -1)
  {
   lwip_close(xServerSocket.c);
   continue;
  }
  int ret;
  while(1)
  {
   FD_ZERO(&fdsr);
   FD_SET(xServerSocket.c, &fdsr);
   ret = lwip_select(xServerSocket.c+1, &fdsr, NULL, 0, &tv);
   if(ret > 0)
   {
    if (FD_ISSET(xServerSocket.c, &fdsr))
    {
     int datalen;
     datalen = lwip_recv(xServerSocket.c,ServerRevBuf,NET_BUF_SIZE,0);
     if(datalen > 0)
     {
      //此处处理接收到的数据,省略
      ........................
     }
     else
     {
      lwip_close(xServerSocket.c);
      xServerSocket.c = -1;
      break;
     }
    }
   }
   else if(ret < 0)
   {
    lwip_close(xServerSocket.c);
    xServerSocket.c = -1;
    break;
   }
  }
  lwip_close(xServerSocket.c);
  xServerSocket.c = -1;
}
// vTaskDelete( NULL );
}
目前的问题是,TCP SERVER的端口8800,需要和测试电脑的两个CLIENT端口(例如:30000、30001)同时建立连接,
进行数据收发,请问如何实现?折腾了好几天,依旧没有结果。
此帖出自stm32/stm8论坛

最新回复

楼主,我也遇到了同样的问题,你解决了么,能不能告知一下怎样解决?谢谢  详情 回复 发表于 2017-2-8 22:25
点赞 关注
 

回复
举报

8

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
在线等待大侠回复
此帖出自stm32/stm8论坛
 
 

回复

4005

帖子

0

TA的资源

版主

板凳
 
帮顶啦
此帖出自stm32/stm8论坛

点评

谢啦!  详情 回复 发表于 2015-1-5 15:21
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

4
 
看看 lwipopts.h 这个文件的配置,看允许建立的连接数,打开调试接口看看连接的执行路径,好好研究一下,TCP 连接建立的过程和状态机。
此帖出自stm32/stm8论坛

点评

/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application sends a lot of data out of ROM (or other static memory), this should be set high. */ #define MEMP_NUM_PBUF 100 /*  详情 回复 发表于 2015-1-5 15:30
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

5
 


谢啦!

此帖出自stm32/stm8论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

6
 
Study_Stellaris 发表于 2015-1-5 09:57
看看 lwipopts.h 这个文件的配置,看允许建立的连接数,打开调试接口看看连接的执行路径,好好研究一下,TCP 连接建立的过程和状态机。
/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application  sends a lot of data out of ROM (or other static memory), this
   should be set high. */
#define MEMP_NUM_PBUF           100
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One  per active UDP "connection". */
#define MEMP_NUM_UDP_PCB        6
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP  connections. */
#define MEMP_NUM_TCP_PCB        10
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP  connections. */
#define MEMP_NUM_TCP_PCB_LISTEN 5
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP  segments. */
#define MEMP_NUM_TCP_SEG        20
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active  timeouts. */
#define MEMP_NUM_SYS_TIMEOUT    10


这些参数我看了,应该是没有问题。目前的状况是可以正常建立两个连接,但是只有第一个连接可以正常收发数据,第二个连接需要断开第一个连接之后才能正常收发。一个人在这瞎琢磨,周围没有别人可以商量,只能慢慢分析。还望不吝赐教。谢谢!

此帖出自stm32/stm8论坛

点评

理解,不过我有好长一段时间不用 lwip了,所以好多忘记了。我不太了解你是如何测试的,会不会是客户端的问题呢? 如果可以建立连接,但不能进行收发,可以看一下到底是不能收呢,还是不能发,找找阻塞的原因。  详情 回复 发表于 2015-1-5 15:51
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

7
 
本帖最后由 Study_Stellaris 于 2015-1-5 15:53 编辑
Qiuhf 发表于 2015-1-5 15:30
/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application  sends a lot of data out of ROM (or other static memory), this
   should be set high. */
#define MEMP_NUM_PBUF           100
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One  per active UDP "connection". */
#define MEMP_NUM_UDP_PCB        6
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP  connections. */
#define MEMP_NUM_TCP_PCB        10
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP  connections. */
#define MEMP_NUM_TCP_PCB_LISTEN 5
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP  segments. */
#define MEMP_NUM_TCP_SEG        20
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active  timeouts. */
#define MEMP_NUM_SYS_TIMEOUT    10


这些参数我看了,应该是没有问题。目前的状况是可以正常建立两个连接,但是只有第一个连接可以正常收发数据,第二个连接需要断开第一个连接之后才能正常收发。一个人在这瞎琢磨,周围没有别人可以商量,只能慢慢分析。还望不吝赐教。谢谢!

理解,不过我有好长一段时间不用 lwip了,所以好多忘记了。我不太了解你是如何测试的,会不会是客户端的问题呢?
如果可以建立连接,但不能进行收发,可以看一下到底是不能收呢,还是不能发,找找阻塞的原因。
另外关于 TCP 的内容,可以看看这篇文章,希望对你有帮助。http://coolshell.cn/articles/11564.html




此帖出自stm32/stm8论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

8
 
Study_Stellaris 发表于 2015-1-5 15:51
理解,不过我有好长一段时间不用 lwip了,所以好多忘记了。我不太了解你是如何测试的,会不会是客户端的问题呢?
如果可以建立连接,但不能进行收发,可以看一下到底是不能收呢,还是不能发,找找阻塞的原因。
另外关于 TCP 的内容,可以看看这篇文章,希望对你有帮助。http://coolshell.cn/articles/11564.html

非常感谢,我再仔细研究研究你所说的几点,发现新问题再想你请教。


此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
我也是这问题。。。。琢磨了好久无果啊。。。。。。
此帖出自stm32/stm8论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

10
 
我也是这个问题!!楼主方便提供下QQ号码??我的号码是421129312
此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

1

TA的资源

一粒金砂(初级)

11
 
我也在用STM32F107的板子做网络MP3播放器,需要同时实现网络在线lwip和mp3播放协调工作,
系统选用RT-Thread 或freeRTOS ,一直没有搞定,求赐教。我的QQ号码是:374532887
此帖出自stm32/stm8论坛
 
个人签名Goodman
 
 

回复

1228

帖子

0

TA的资源

纯净的硅(高级)

12
 
楼主问题解决了吗
此帖出自stm32/stm8论坛
 
个人签名

喝最烈的酒,..DIY最实用的东西

 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

13
 
楼主,我也遇到了同样的问题,你解决了么,能不能告知一下怎样解决?谢谢
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表