TCP/IP: ITcIoTcpProtocol(Recv)

Die Interfaces ITcIoTcpProtocol und ITcIoTcpProtocolRecv ermöglichen eine TCP/IP Kommunikation aus der Echtzeitumgebung heraus.

Ein Projekt, welches dieses Interface verwendet, enthält einen Pointer auf ein ITcIoTcpProtocol Objekt und implementiert ITcIoTcpProtocolRecv selbst. ITcIoTcpProtocolRecv dient als Callbackinterface um Daten und Events innerhalb der Applikation vom TCP/IP Modul empfangen zu können. Die Interfaces sind an eine Socket API angelehnt.
Bevor ein Socket genutzt werden kann, muss dieser mit AllocSocket() allokiert werden.

TCP/IP: ITcIoTcpProtocol(Recv) 1: ITcIoTcpProtocolRecv Methoden:

Name

Description

ReceiveData

Wird vom TCP/UDP RT Modul als Callback aufgerufen, um Daten zu übergeben.

ReceiveEvent

Wird vom TCP/UDP RT Modul als Callback aufgerufen, falls ein Event aufgetreten ist.

TCP/IP: ITcIoTcpProtocol(Recv) 2: ITcIoTcpProtocol Methoden:

Name

Description

AllocSocket

Allokiert einen Socket.

FreeSocket

Gibt einen Socket frei.

Connect

Baut eine Verbindung zu einer Gegenstelle auf.

IsConnected

Gibt Auskunft, ob ein Socket verbunden ist (für eingehende und ausgehenden Verbindungen).

Close

Schließt einen Socket.

Listen

Öffnet einen TCP Port für eingehende Verbindungen (siehe Remarks).

Accept

Für Serverfunktionalität: Akzeptiert einkommende Verbindungen (siehe Remarks).

SendData

Sendet Daten (Server und Client-Funktionalität).

CheckReceived

Muss zyklisch aufgerufen werden; ReceiveEvent und ReceiveData werden im Context dieser Methode als Callback genutzt (Server und Client-Funktionalität).

GetRemoteIpAddr

Liefert die entfernte IP Adresse eines Kommunikationspartners.

GetFreeSendDataSize

Liefert die Anzahl an freien Bytes im TCP Sendebuffer.

TCP/IP: ITcIoTcpProtocol(Recv) 3:

CheckReceived() kontinuierlich aufrufen.

TCP/IP: ITcIoTcpProtocol(Recv) 4:

AllocSocket() ggf. erneut bei OnlineChange aufrufen um das Ziel der Callbacks zu erneuern.

Hier wird Programmiersprachen-unabhängig der Ablauf einer Client-/ und Serverimplementierung beschrieben.
Dabei soll nur ein Überblick gegeben werden, die Beispiele zeigen die konkrete Verwendung.

Implementierung eines TCP Servers:

Name

Beschreibung

AllocSocket

Öffnet einen Socket.

Listen

Öffnet einen Port auf dem Verbindungen erwartet werden.

Accept

In der ReceiveEvent()-Methode aufgerufen um eine Verbindung anzunehmen.

ReceiveData

Wird bei empfangenen Daten aufgerufen.

SendData

Kann genutzt werden, um Daten zu versenden.

FreeSocket

Auf den Listen-Socket sowie alle Verbindungs-Sockets zum Beenden.

Code-Skizze für das Akzeptieren einer Verbindung:

HRESULT CIpStackDemo::ReceiveEvent(ULONG socketId, TCPIP_EVENT tcpEvent)...
case TCPIP_EVENT_CONN_INCOMING:
m_spTcpProt->Accept(socketId);
break;

Implementierung eines TCP Clients:

Name

Beschreibung

AllocSocket

Öffnet einen Socket.

Connect

Startet den Verbindungsaufbau.

IsConnected

Überprüft, ob die Verbindung erfolgreich aufgebaut wurde.

ReceiveData

Wird bei empfangenen Daten aufgerufen.

SendData

Kann genutzt werden, um Daten zu versenden.

FreeSocket

Auf den Listen-Socket sowie alle Verbindungs-Sockets zum Beenden.

TCP/IP: ITcIoTcpProtocol(Recv) 5:

Verbindungsabbruch durch Betriebssystem bei Promiscuous Mode

Wenn an dem RT-Ethernet Adapter im Tab „Adapter“ der Promiscuous Mode eingeschaltet ist, werden eintreffende TCP Verbindungsaufbauten durch das Betriebssystem abgebrochen, da dieses einen im TCP/UDP RT Objekt geöffneten Port nicht kennt.