14316|6

373

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

STM32F103 LWIP TCP客户端连接不上 [复制链接]

请教各位兄弟姐妹,我用STM32F103ZET6+ENC28J60学习LWIP,当用TCP服务器模式时,通信正常,用TCP客户端模式时,能ping通,但是连接不上,请各位帮忙想想是什么问题,以下是主要代码。
int main(void)
{         
        RCC_ClocksTypeDef RCC_Clocks;
        NVIC_Configuration();
        GPIO_Configuration();
        uart_init(115200);                
        SPI1_Init();          
        RCC_GetClocksFreq(&RCC_Clocks);
  SysTick_Config(RCC_Clocks.SYSCLK_Frequency / 100);
        LwIP_Init();       
        Init_TCP_Client();
        while (1)
        {

                System_Periodic_Handle();       
        }       
}
void LwIP_Init(void)
{
  struct ip_addr ipaddr;
  struct ip_addr netmask;
  struct ip_addr gw;
  uint8_t macaddress[6]={0,0,0,0,0,1};
  mem_init();
  memp_init();
  IP4_ADDR(&ipaddr, 192, 168, 1, 137);
  IP4_ADDR(&netmask, 255, 255, 255, 0);
  IP4_ADDR(&gw, 192, 168, 1, 1);
  Set_MAC_Address(macaddress);
  netif_add(&netif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);
  netif_set_default(&netif);
  netif_set_up(&netif);
}

#define TCP_CLIENT_PORT  5000
//初始化TCP客户端
void Init_TCP_Client(void){
        struct tcp_client_state* ts;
        struct tcp_pcb* tcp_client_pcb;//定义一个TCP的协议控制块
        ip_addr_t ipaddr;
        //IP4_ADDR(&ipaddr, 219, 226, 91, 127);         
        IP4_ADDR(&ipaddr, 192, 168, 1, 101);  
        tcp_client_pcb = tcp_new();                                //新建一个PCB
        if(tcp_client_pcb!=NULL){               
                  ts = mem_malloc(sizeof(struct tcp_client_state));         //申请内存
                  tcp_arg(tcp_client_pcb, ts);                                  //将程序的协议控制块的状态传递给多有的回调函数
                 // tcp_bind(tcp_client_pcb, IP_ADDR_ANY, TCP_CLIENT_PORT);
      tcp_connect(tcp_client_pcb,&ipaddr,TCP_CLIENT_PORT,tcp_client_connect);       
                        printf("初始化TCP客户端\r\n");
        }
}
err_t tcp_client_connect(void *arg,struct tcp_pcb *tpcb,err_t err)
{
                struct tcp_client_state* ts;
          ts = arg;       
          ts->state =   ES_RECEIVED;                //可以开始接收数据了
          lwip_flag |= LWIP_CONNECTED;                //标记连接成功了
                tcp_write(tpcb,response,strlen(response),0);  //回应信息
                tcp_recv(tpcb, tcp_client_recv);        //指定连接接收到新的数据之后将要调用的回调函数
                tcp_poll(tpcb, tcp_client_poll, 0); //指定轮询时将要调用的回调函数       
                tcp_close(tpcb);
                return ERR_OK;
}
用的网络调试助手如图所示

无标题.png (38.68 KB, 下载次数: 0)

无标题.png
此帖出自stm32/stm8论坛

最新回复

我用UIP做过,好像可以,你可以找我的代码对比一下,LWIP确实没有弄过,只能帮顶。。。。。。。。。。  详情 回复 发表于 2014-11-25 09:45
点赞 关注
 

回复
举报

4997

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
找一下原因,逐步分析,先看看电脑客户端和主机能否连接上
此帖出自stm32/stm8论坛

点评

STM32做服务器,电脑做客户端时,通信很正常,我看到网上有不少人反映说是STM32做客户端时,连不上电脑,不知道他们最终怎么解决的  详情 回复 发表于 2014-11-24 18:24
 
个人签名我的博客
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
zhaojun_xf 发表于 2014-11-24 10:53
找一下原因,逐步分析,先看看电脑客户端和主机能否连接上

STM32做服务器,电脑做客户端时,通信很正常,我看到网上有不少人反映说是STM32做客户端时,连不上电脑,不知道他们最终怎么解决的
此帖出自stm32/stm8论坛
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

4
 
本帖最后由 Study_Stellaris 于 2014-11-25 09:52 编辑

1.从截图看,你使用的是别人写的一个网络调试助手,我觉得对 “本地 IP 地址 ”这部分理解有误。这个地址应该不是你的开发板的地址。我认为这个软件写的不好。这个地方不应该填,即便填写应该也是你电脑的 IP 地址,通过你的程序来看应该是 192, 168, 1, 101.这样的调试软件很多,可以在网上找一下,我一般喜欢用大牛写的开源工具。
2.告诉你一个调试的诀窍。关闭电脑的其它网卡。用 wireshark 来抓包分析,看看 TCP 协议中各项地址是否正常。应该把这个工具做为调试网络底层驱动必须用好的一个工具。3.慢慢来,不要急。

此帖出自stm32/stm8论坛

点评

有道理,多谢,我再调调  详情 回复 发表于 2014-11-26 20:40
 
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

5
 
我用UIP做过,好像可以,你可以找我的代码对比一下,LWIP确实没有弄过,只能帮顶。。。。。。。。。。
此帖出自stm32/stm8论坛

点评

我也用过uip,不过没做过客户端,只做过服务器  详情 回复 发表于 2014-11-26 20:40
 
个人签名我的博客
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

6
 
Study_Stellaris 发表于 2014-11-25 09:42
1.从截图看,你使用的是别人写的一个网络调试助手,我觉得对 “本地 IP 地址 ”这部分理解有误。这个地址应 ...
有道理,多谢,我再调调
此帖出自stm32/stm8论坛
 
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

7
 
zhaojun_xf 发表于 2014-11-25 09:45
我用UIP做过,好像可以,你可以找我的代码对比一下,LWIP确实没有弄过,只能帮顶。。。。。。。。。。
我也用过uip,不过没做过客户端,只做过服务器
此帖出自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
快速回复 返回顶部 返回列表