[gelöst] QTcpServer und QTcpSocket Basics

Alles rund um die Programmierung mit Qt
Antworten
bobcat
Beiträge: 125
Registriert: 21. April 2010 14:51

[gelöst] QTcpServer und QTcpSocket Basics

Beitrag von bobcat »

Ok, eine Anfängerfrage zum Verständnis ...:
Ich möchte mittels TCP zwischen zwei Prozessen auf einem Rechner kommunizieren. Der eine Prozess benutzt einen QTcpSocket und verbindet sich mit dem Host:

Code: Alles auswählen

QTcpSocket socket;
QHostAddress ip("127.0.0.1");
int port = 1212;
socket.connectToHost(ip, port);
Kann ich im zweiten Prozess das gleiche machen, d.h. einen QTcpSocket auf dieselbe Adresse und denselben Port verbinden? Oder muss der zweite Prozess einen QTcpServer bieten, der auf der 127.0.0.1 listened und dann bei eingehender Anfrage einen QTcpSocket* liefert? (Wenn ich ein ping 127.0.0.1 absende, dann bekomme ich ja jetzt schon eine Antwort, auch ohne dass ich extra einen Server auf der Adresse eingerichtet habe).
Mit anderen Worten: Könnte ich zwei Sockets direkt miteinander verbinden oder brauche ich immer einen Server?
Zuletzt geändert von bobcat am 18. April 2016 08:33, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QTcpServer und QTcpSocket Basics

Beitrag von Christian81 »

Es ist immer ein Server und mindestens ein Client nötig. Beispiele dazu gibt es hier: http://doc.qt.io/qt-5/qtcpserver.html#details
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: [gelöst] QTcpServer und QTcpSocket Basics

Beitrag von RHBaum »

Mit anderen Worten: Könnte ich zwei Sockets direkt miteinander verbinden oder brauche ich immer einen Server?
Leider versteckt hier Qt viele Details, bzw. macht es dir extrem komfortabel ^^

Native Sockets (BSD Sockets, winsock) gibts keine Trennung zwischen Client und Server an dem Socket Construkt.
Aber es gibt mehrere Modis, wie man nen Socket zum connecten bekommt. Und da ist "Server" und "Client" unterschiedlich.
der client kann meist direkt mit connect auf nen Serversocket drauf ... der Server muss dazu vorher in den list modus gebracht werden und dann die verbindung entgegennehmen oder ablehnen (bind - listen - accept) ...
Und das ist auch der Hintergrund der Begrifflichkeiten ... Server ist immer der im "listen" modus, der bei verbindungsanfragen den call bekommt, und dann nen neuen socket für die angenomme verbindung erzeugen kann (accept) und dabei weiter den listener socket wieder im listen modus weiterlaufen kann (server für multiple verbindungen).
Der connect kann das nicht, der bricht nur nach timeout oder Ablehnung ab, oder verbindet halt (error code).
auch bei gutem timing schaffst es nicht 2 sockets via 2 x connect zu verbinden, nur über die verfahren geregelt ist, wer die vebindung initiiert und wer bestätigt (Acknowledge) im TCP Handschake.

Hoffe das hilft das ganze bissi zu verstehen ^^

Ciao ...
Antworten