LWIP не может подключиться к удаленному серверу - PullRequest
0 голосов
/ 17 марта 2020

Мой код является необработанным клиентским приложением TCP / IP. Он может часто подключаться к локальному серверу на моем компьютере, но не может подключаться к удаленному серверу «иногда (в соотношении 2/3)». Удаленный сервер работает нормально, я гарантирую, подключив мой компьютер с простым приложением сокета. Если я попытаюсь выполнить функцию TCP_WRITE, вернем ошибку 13, так что ошибка соединения.

Я думаю, что мое устройство не может получить ACK во время ожидания или я не знаю.

Как я могу решить это?

Мое устройство - LPC1769. Я использую измененное приложение сервера LPCopen TCP / IP для клиентской версии самостоятельно.

Я добавляю некоторый блок кода, связанный с примером изменения из lpcopen.

Я прилагаю свой lwipopt.h, чтобы опции могли очень быстро выполнить приложение веб-сервера с веб-страницей 70 КБ.

void tcp_echoclient_connect(void)
{
struct ip_addr DestIPaddr;

if (echo_pcb != NULL)
{
IP4_ADDR( &DestIPaddr, 192, 168, 1, 39 );

/* connect to destination address/port */
tcp_connect(echo_pcb,&DestIPaddr,7,echo_accept);
}
else
{
/* deallocate the pcb */
memp_free(MEMP_TCP_PCB, echo_pcb);
// DEBUGOUT("\n\r can not create tcp pcb");

}
}





void
echo_init(void)
{
echo_pcb = tcp_new();
if (echo_pcb != NULL)
{
err_t err;

err = tcp_bind(echo_pcb, IP_ADDR_ANY,7);
if (err == ERR_OK)
{
tcp_echoclient_connect();
}
else
{
/* abort? output diagnostic? */
}
}
else
{
/* abort? output diagnostic? */
}
}





int Enet_Write(char *str){



err_t wr_err = ERR_OK;

while ( (str != NULL) && (strlen(str) <= tcp_sndbuf(echo_pcb)) && strlen(str) < 1025 && echo_pcb != NULL)
{

wr_err = tcp_write(echo_pcb, str, strlen(str) , 1);

if (wr_err == ERR_OK)
{
tcp_output(echo_pcb);
DEBUGOUT("Transmitted data is : %s\r\n", str);
if( echo_pcb->unacked != NULL )
DEBUGOUT("Acknowledged \r\n");

break;
}
else if(wr_err == ERR_MEM)
{
/* we are low on memory, try later / harder, defer to poll */
DEBUGOUT("Tcp_write memory error \r\n");
}
else
{
/* other problem ?? */
DEBUGOUT("wr_err is %d \r\n",wr_err);
}
}

}
...