用STM32F103ZET6+ENC28J60+LWIP,将开发板和电路通过路由连到同一局域网内,成功实现了client,server功能,正常连接,通信正常,也无大家说了上线下线的现象。后面加上了DHCP功能,成功分配IP,server功能测试,正常;但,测试client功能时,无法连接成功。
发现tcp_connect(client_pcb, &destip, 4, tcp_client_connected);并不调用tcp_client_connected;不知道什么原因。有人能解答一下么。
一关闭DHCP就能用,但打开后,client就不行了,server能用。
- int main(void)
- {
- sys_config();
- SysTick_Init();
- LwIP_Init();
- tcp_server_init();
- tcp_client_init();
-
- while(1)
- {
-
- LwIP_Periodic_Handle(LocalTime);
- }
- }
- void tcp_server_init(void)
- {
- struct tcp_pcb *pcb;
- printf("tcp server init\n");
-
- pcb = tcp_new();
- tcp_bind(pcb, IP_ADDR_ANY, 1200);
- pcb = tcp_listen(pcb);
-
- tcp_accept(pcb, tcp_server_accept);
- }
- void tcp_client_init(void)
- {
- struct tcp_pcb *client_pcb;
- struct tcp_client_app_arg* app_arg;
- static struct ip_addr destip;
- printf("tcp client inti\n");
- IP4_ADDR(&destip,192,168,0,105);
- client_pcb = tcp_new();
- tcp_bind(client_pcb,IP_ADDR_ANY,4);
- if(client_pcb != NULL)
- {
- tcp_arg(client_pcb, mem_calloc(sizeof(struct tcp_client_app_arg), 1));
- app_arg = client_pcb->callback_arg;
- app_arg->app_state = CLIENT_WAITING_FOR_CONNECTION;
- tcp_connect(client_pcb, &destip, 4, tcp_client_connected);
- }
- else
- {
- printf("tcp alloc failed\n");
- }
- }
- err_t tcp_client_connected(void *arg, struct tcp_pcb *pcb, err_t err)
- {
- struct tcp_client_app_arg *app_arg = (struct tcp_client_app_arg *)arg;
- uint8_t* str = "Welcome to the client\n";
-
- printf("tcp client connected\n");
- tcp_err(pcb, tcp_client_errf); //指定出错时的回调函数
- tcp_recv(pcb, tcp_client_recv); //指定接收到新数据时的回调函数
- tcp_sent(pcb, tcp_client_sent); //指定远程主机成功接收到数据的回调函数
- tcp_poll(pcb, tcp_client_poll, 4); //指定轮询的时间间隔和回调函数(*250ms)
- tcp_write(pcb, (const char *)str, strlen(str), 1);
- app_arg->app_state = CLIENT_WAITING_FOR_CMD;
- return ERR_OK;
- }
|