Ich mache einen Test mit TCP-Client-Anwendung in einem Raspberry Pi (Server im PC), mit PPP (Point-to-Point-Protokoll) mit einem LTE-Modem. Ich habe C-Programm mit Sockets verwendet und die Antwort des Systemaufrufs überprüft. Ich wollte testen, wie Socket in einem schlechten Abdeckungsbereich funktioniert, also habe ich ein paar Tests gemacht, um die Antenne zu entfernen.TCP Sockets in C mit schlechtem Netzwerk
Ich habe die nächsten Schritte folgen:
- eine Verbindung zum Server -> OK
- starten Daten (Schreibsystemaufruf) zu senden -> OK (I auch in dem Server überprüfen)
- ich entfernte die Antenne des LTE-Modem (kein Netzwerk ist, kann es nicht ping)
- Weiter Senden von Daten (schreiben Systemaufruf) ->OK (Server nicht empfängt anyth ing !!!)
- Es beendet Daten und geschlossene Buchse zu senden ->OK (Verbindung noch geöffnet ist, und es gibt keine Daten, da die Antenne entfernt wurde)
- Programm beendet wurde
- ich wieder die Antenne setzen
Einige Zeit später wurden die Daten hochgeladen und die Verbindung geschlossen. Aber ich habe einen anderen Test nach diesen Schritten, aber mit mehr Daten, und es hat diese Daten nicht hochgeladen ...
Ich weiß nicht, ob es eine Möglichkeit, um sicherzustellen, dass die auf TCP-Server geschriebene Daten vom Server empfangen werden (Ich dachte, dass TCP-Schicht dies gewährleistet ..). Ich könnte es manuell mit einem ACK tun, aber ich denke, dass es ein besserer Weg sein muss.
Senden Teilenummer:
while(i<100)
{
sprintf(buf, "Message %d\n", i);
Return = write(Sock_Fd, buf, strlen(buf));
if(Return!=strlen(buf))
{
printf("Error sending data to TCP server. \n");
printf("Error str: %s \n", strerror(errno));
}
else
{
printf("write successful %d\n", i);
i++;
}
sleep(2);
}
Vielen Dank für Ihre Hilfe.
Sind Sie nicht-blockierende Sockets verwenden? Wie schreiben Sie die Daten und überprüfen die Ergebnisse? Können Sie bitte versuchen, ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) des Client-Programms zu erstellen und uns zu zeigen? –
Ich benutze den Standardmodus, Blockiermodus Ich denke (wenn ich eine Verbindung zum Server herstelle, wartet es, bis die Verbindung hergestellt wurde). –