TCP senden/empfangen an einem Port

Gast #3270219
Lesenswert?

Peter II schrieb:
> oder nimmt du auch 2 Telefon zum anrufen, eines zum hören und eines zum
> sprechen?

Wenn ich also morgen mit dem Orient-Express nach Berlin fahre und 
übermorgen wieder zurück, dann kann ich das vergessen, weil ich ja erst 
auf den gleichen Zug zum Heimfahren warten muss.

Oder wie hast Du das gemeint?
Ok, ich weiss schon was Du meinst, aber schlüssig ist das nicht.
Gast #3270344
Lesenswert?

Der Port ist die Durchwahl auf dem Server. Wenn auf zwei 
unterschiedlichen Servern je ein Prozess auf Port 42 hört (listen()), 
dann jeder dieser beiden, Multithreading oder select() vorausgesetzt, 
jeweils eine (Client-)Verbindung zu Port 42 auf dem anderen aufmachen.
Ein Client hat keinen wählbaren Port, den er benutzt, nur einen, den er 
beim Server erreichen will.
Gast #3270538
Lesenswert?

Peter schrieb:
> Wenn ich also morgen mit dem Orient-Express nach Berlin fahre und
> übermorgen wieder zurück, dann kann ich das vergessen, weil ich ja erst
> auf den gleichen Zug zum Heimfahren warten muss.

Nein, so ist es nicht. Das Ziel deiner Fahrt, bzw. der Startpunkt deiner 
Rückreise ist jeweils Berlin. Es geht dabei nicht um den Weg.

Der Server hat einen Port auf dem er empfängt und sendet.
Der Client hat einen Port auf dem er sendet und empfängt. Das ist 
(meist) ein anderer Port.
Persönliche Seite #3270574
Lesenswert?

DirkB schrieb:
> Der Client hat einen Port auf dem er sendet und empfängt. Das ist
> (meist) ein anderer Port.

Der wird i.d.R. dynamisch vom IP-Stack zugewiesen und ist auf Ebene der 
Socketprogrammierung recht uninteressant.

Es gibt Protokolle, die für jede Richtung der Kommunikation ein eigenes 
Socket-Pärchen aufmachen, ftp ist ein unrühmliches Beispiel davon. So 
etwas bereitet in Router/NAT-Umgebungen immer wieder Freude; wenn kein 
wirklich zwingender Zwang (eine Alliteration! Ha!) besteht, sollte man 
so etwas sein lassen.

Die stinknormale Art der Kommunikation, wie sie bei http, smtp, pop3 & 
Co. oder auch simplem telnet erfolgt --Server lauscht auf festgelegtem 
Port, Client verbindet sich mit diesem und nutzt lokal einen dynamisch 
zugewiesenen-- ist für bidirektionale Kommunikation, also das Senden und 
Empfangen von Daten, bestens geeignet.
#3270579
Lesenswert?

Hallo Peter,

das kommt ganz drauf an, was Du machen möchtest. Es spricht überhaupt 
nichts dagegen, den gleichen Port zu nehmen. Das ist sogar die beste 
Möglichkeit, wenn Du z. B. mehrere Verbindungen parallel erlauben 
möchtest, vielleicht durch Firewalls mußt o. ä.
Lesen und Schreiben auf dem gleichen Socket ist unabhängig und kann auch 
aus unterschiedlichen Threads erfolgen (sogar aus unterschiedlichen 
Prozessen, aber das erfordert größere Verrenkungen, daher nur der 
Vollständigkeit halber erwähnt). Es gibt verschiedene Modi, wie man das 
ansteuert (blockierendes oder nichtblockierenes I/O).

Normalerweise hast Du bei einer Socket-Verbindung eine Server-Seite, die 
auf eine Verbindung wartet und eine Client-Seite, die die Verbindung 
aufbaut. Das kann man natürlich je nach Anwendung auch mischen, wie 
"Stolzer" geschrieben hat, das heißt aber, daß man beides auf beiden 
Seiten implementieren muß und löst noch nicht die Frage, auf welcher der 
beiden Verbindungen man dann liest und auf welcher man schreibt ;-) .

Ein Negativbeispiel, welche Probleme man mit verschiedenen Ports 
bekommen kann, ist das ftp-Protokoll, das einen Socket für Kommandos und 
einen weiteren Socket für Daten benutzt, wobei (im Active Mode) der 
ftp-Server eine Verbindung zum Client aufbauen muß und meistens an 
Firewalls, NAT u. ä. scheitert, weshalb man den "Passive Mode" 
eingeführt und die Sache kompliziert hat.

Um Dir etwas Genaueres raten zu können, müßte man wissen, was Du machen 
möchstest, also welche Parteien mit welchen anderen kommunizieren sollen 
und was für Nachrichten verschickt werden sollen.

Tschüß, Matthias
Gast #3270853
Lesenswert?

Hallo und erst mal vielen Dank für die vielen, ausführlichen Antworten!

Rufus Τ. Firefly schrieb:
> Es gibt Protokolle, die für jede Richtung der Kommunikation ein eigenes
> Socket-Pärchen aufmachen, ftp ist ein unrühmliches Beispiel davon.

Es liegt kein Grund dafür vor - je einfacher desto besser würd ich 
sagen.

Matthias H. schrieb:
> Um Dir etwas Genaueres raten zu können, müßte man wissen, was Du machen
> möchstest, also welche Parteien mit welchen anderen kommunizieren sollen
> und was für Nachrichten verschickt werden sollen.

Letztlich soll mit Mikrocontrollern eine Verbindung (am besten mit TCP?) 
mit dem PC hergestellt werden. Allerdings habe ich bisher noch keinen uC 
im Einsatz. Momentan sende ich von/zum localhost.
#3270862
Lesenswert?

Peter schrieb:
> (am besten mit TCP?)

Dir ist aber klar, daß zumindest kleine (8 bitter) µCs in der Regel 
keine integrierte Hardware für Ethenet und keine Bibliotheken für TCP 
mitbringen.
Einfach im Sinne von schnell implementiert ist Kommunikation über die 
serielle Schnittstelle. Auch die ist duplexfähig.
Für TCP/IP würde ich dann schon zu etwas leistungsfähigeren 16 oder 32 
Bit µCs schauen, aber du hast nicht gesagt welche µCs du meinst.
Persönliche Seite #3270883
Lesenswert?

Udo Schmitt schrieb:
> Dir ist aber klar, daß zumindest kleine (8 bitter) µCs in der Regel
> keine integrierte Hardware für Ethenet und keine Bibliotheken für TCP
> mitbringen.

Das i.d.R. nicht, aber es gibt genügend Beispiele, wo jemand eine 
ISA-Netzwerkkarte (bzw. einen Netzwerkbaustein à la RTL8019 o.ä.) an 
einen AVR gebastelt hat und auf dem AVR einen Webserver laufen lässt.
#3270890
Lesenswert?

Rufus Τ. Firefly schrieb:
> aber es gibt genügend Beispiele, wo jemand eine
> ISA-Netzwerkkarte (bzw. einen Netzwerkbaustein à la RTL8019 o.ä.) an
> einen AVR gebastelt hat und auf dem AVR einen Webserver laufen lässt.

Du hast völlig recht, es gibt oder gab ja sogar von Pollin das Board mit 
Ethernet.

Was ich sagen wollte ist daß es für einen 8 bitter nicht unbedingt das 
'natürliche' Protokoll ist.
Schon allein weil der Protokollstack auch schon einen ordentlichen Teil 
von Prozessorleistung und Platz im Programmspeicher belegt.
Gast #3271576
Lesenswert?

Udo Schmitt schrieb:
> Für TCP/IP würde ich dann schon zu etwas leistungsfähigeren 16 oder 32
> Bit µCs schauen, aber du hast nicht gesagt welche µCs du meinst.

Ich werde es erstmal mit einem PIC32 Demo-Board versuchen. Der fertige 
Stack von Microchip und die Demos scheinen mir ein guter Einstieg.

Was gibt es denn für alternativen zu TCP, wenn ich eine gesicherte 
Datenübertragung machen will?
UDP? - Da muss ich dann eine Menge 'außenrum' programmieren, was ich so 
gelesen haben.

Udo Schmitt schrieb:
> Was ich sagen wollte ist daß es für einen 8 bitter nicht unbedingt das
> 'natürliche' Protokoll ist.

Und welches wäre das dann?
#3271646
Lesenswert?

Peter schrieb:
> Was gibt es denn für alternativen zu TCP, wenn ich eine gesicherte
> Datenübertragung machen will?
> UDP? - Da muss ich dann eine Menge 'außenrum' programmieren, was ich so
> gelesen haben.

Es gibt noch ein Protokoll namens SCTP, das gesichert, aber 
nachrichtenorientiert ist.

Ich muß zugeben, daß ich damit keine praktische Erfahrung habe, dazu ist 
es zu exotisch ;-) .

Oder man strickt sich was auf der Basis von nacktem IP selber, aber das 
will man aus mehreren Gründen nicht wirklich ;-) .

> Udo Schmitt schrieb:
>> Was ich sagen wollte ist daß es für einen 8 bitter nicht unbedingt das
>> 'natürliche' Protokoll ist.
>
> Und welches wäre das dann?

Ich denke, Udo meint, Seriell-ASCII oder so ;-) . Wenn Du einen so 
"großen" Mikrocontroller nimmst, wie Du nehmen möchtest, sollte sich das 
erledigt haben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren