|
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;
}
用的网络调试助手如图所示
|
|