cancel
Showing results for 
Search instead for 
Did you mean: 

LWIP

Stefano1
Associate

Hi,

how can I check if my client in connected to pc server?

--------------------------

/* init code for LWIP */

MX_LWIP_Init();

/* USER CODE BEGIN 5 */

LOCK_TCPIP_CORE();

tcp_setup();

UNLOCK_TCPIP_CORE();

---------------------------

void tcp_setup(void)

{

uint32_t data = 0xdeadbeef;

/* create an ip */

ip4_addr_t ip;

IP4_ADDR(&ip,192,168,1,4); //IP of my PHP server

/* create the control block */

testpcb = tcp_new(); //testpcb is a global struct tcp_pcb

// as defined by lwIP

/* dummy data to pass to callbacks*/

tcp_arg(testpcb, &data);

/* register callbacks with the pcb */

// tcp_recv(testpcb, tcpRecvCallback);

tcp_sent(testpcb, tcpSendCallback);

tcp_err(testpcb, tcpErrorHandler);

/* now connect */

tcp_connect(testpcb, &ip, 8888, connectCallback);

}

---------------------------

this snippet run and is OK.

How can I check if the client is alwais connected to pc server?

Can anyone help me?

Thank you in advance.

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
STea
ST Employee

Hello @Stefano1 ,

To check if your client is always connected to the PC server, you can implement a mechanism to periodically send a "heartbeat" or "keep-alive" message from the client to the server. If the server does not receive this message within a certain timeframe, it can assume the client is disconnected. Similarly, the client can check for responses from the server to ensure the connection is still active.

here is an example:

#define KEEP_ALIVE_INTERVAL 5000 // 5 seconds

void keepAliveTimerCallback(void *arg) {
    if (testpcb != NULL) {
        // Send a keep-alive message
        tcp_write(testpcb, "KEEP_ALIVE", strlen("KEEP_ALIVE"), TCP_WRITE_FLAG_COPY);
        tcp_output(testpcb);
    }
    // Re-arm the timer
    sys_timeout(KEEP_ALIVE_INTERVAL, keepAliveTimerCallback, NULL);
}
void tcp_setup(void) {
...
    // Start the keep-alive timer
    sys_timeout(KEEP_ALIVE_INTERVAL, keepAliveTimerCallback, NULL);
}

Regards

In order to give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.

View solution in original post

1 REPLY 1
STea
ST Employee

Hello @Stefano1 ,

To check if your client is always connected to the PC server, you can implement a mechanism to periodically send a "heartbeat" or "keep-alive" message from the client to the server. If the server does not receive this message within a certain timeframe, it can assume the client is disconnected. Similarly, the client can check for responses from the server to ensure the connection is still active.

here is an example:

#define KEEP_ALIVE_INTERVAL 5000 // 5 seconds

void keepAliveTimerCallback(void *arg) {
    if (testpcb != NULL) {
        // Send a keep-alive message
        tcp_write(testpcb, "KEEP_ALIVE", strlen("KEEP_ALIVE"), TCP_WRITE_FLAG_COPY);
        tcp_output(testpcb);
    }
    // Re-arm the timer
    sys_timeout(KEEP_ALIVE_INTERVAL, keepAliveTimerCallback, NULL);
}
void tcp_setup(void) {
...
    // Start the keep-alive timer
    sys_timeout(KEEP_ALIVE_INTERVAL, keepAliveTimerCallback, NULL);
}

Regards

In order to give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.