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.
ITcIoTcpProtocolRecv Methoden:
Name | Description |
---|---|
Wird vom TCP/UDP RT Modul als Callback aufgerufen, um Daten zu übergeben. | |
Wird vom TCP/UDP RT Modul als Callback aufgerufen, falls ein Event aufgetreten ist. |
ITcIoTcpProtocol Methoden:
Name | Description |
---|---|
Allokiert einen Socket. | |
Gibt einen Socket frei. | |
Baut eine Verbindung zu einer Gegenstelle auf. | |
Gibt Auskunft, ob ein Socket verbunden ist (für eingehende und ausgehenden Verbindungen). | |
Schließt einen Socket. | |
Öffnet einen TCP Port für eingehende Verbindungen (siehe Remarks). | |
Für Serverfunktionalität: Akzeptiert einkommende Verbindungen (siehe Remarks). | |
Sendet Daten (Server und Client-Funktionalität). | |
Muss zyklisch aufgerufen werden; ReceiveEvent und ReceiveData werden im Context dieser Methode als Callback genutzt (Server und Client-Funktionalität). | |
Liefert die entfernte IP Adresse eines Kommunikationspartners. | |
Liefert die Anzahl an freien Bytes im TCP Sendebuffer. |
![]() | CheckReceived() kontinuierlich aufrufen. |
![]() | 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 |
---|---|
Öffnet einen Socket. | |
Öffnet einen Port auf dem Verbindungen erwartet werden. | |
In der ReceiveEvent()-Methode aufgerufen um eine Verbindung anzunehmen. | |
Wird bei empfangenen Daten aufgerufen. | |
Kann genutzt werden, um Daten zu versenden. | |
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 |
---|---|
Öffnet einen Socket. | |
Startet den Verbindungsaufbau. | |
Überprüft, ob die Verbindung erfolgreich aufgebaut wurde. | |
Wird bei empfangenen Daten aufgerufen. | |
Kann genutzt werden, um Daten zu versenden. | |
Auf den Listen-Socket sowie alle Verbindungs-Sockets zum Beenden. |
![]() | 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. |
- Methode ITcIoTcpProtocolRecv:ReceiveData
- Methode ITcIoTcpProtocolRecv:ReceiveEvent
- Methode ITcIoTcpProtocol:AllocSocket
- Methode ITcIoTcpProtocol:FreeSocket
- Methode ITcIoTcpProtocol:Connect
- Methode ITcIoTcpProtocol:IsConnected
- Methode ITcIoTcpProtocol:Close
- Methode ITcIoTcpProtocol:Listen
- Methode ITcIoTcpProtocol:Accept
- Methode ITcIoTcpProtocol:SendData
- Methode ITcIoTcpProtocol:CheckReceived
- Methode ITcIoTcpProtocol:GetRemoteIpAddr
- Methode ITcIoTcpProtocol:GetFreeSendDataSize