Zwei Rechner mit Sockets im Netzwerk verbinden - Wie weiße ich die Ports zu? [gelöst]



  • Zuerst: Die Frage ist eigentlich nicht .NET spezifisch, aber ich habe kein allgemeines Netzwerk-Unterforum gefunden

    Ich möchte zwei Rechner miteinander über Sockets verbinden. TCP/IP habe ich grundsätzlich voll verstanden. Nur: Wie besetze ich die Ports?
    Kann ich mir einfach als Anwendung einen zufälligen Port im Bereich > 1024 besetzen?
    Denn der Client-Andwendung muss der Port ja vorher bekannt sein.

    Und wie hieße die .NET-Funktion, um zu überprüfen, ob ein bestimmter Port frei ist?



  • ch++ schrieb:

    TCP/IP habe ich grundsätzlich voll verstanden.

    Ich wäre mit solchen Aussagen vorsichtig.

    Ja, du kannst dir einfach irgendeinen Port nehmen. Muss nicht mal unbedingt kleiner 1024 sein, solange du weißt, was du tust. Das einfachste wäre u.U. das konfigurierbar zu machen, dann ist es das Problem des Benutzers, einen passenden Port zu wählen, und du schlägst dann per default einfach irgendeinen Port vor.

    Dann gibts noch Protokolle, um Dienste im Netzwerk zu finden, z.B. Bonjour oder UPNP. Das würde ich mir aber erst anschauen, wenn dir die Möglichkeit, irgendeinen Port vorzugeben nicht reicht.



  • Danke für die Antwort.
    Was passiert, wenn man einen Port besetzt, der zufällig schon von einem anderen Programm in Anspruch genommen wird? Wird eine Ausnahme ausgeworfen, oder kriegen beide Prozesse alle Daten „zugestellt“?



  • Ich hab vergessen, auf die andere Frage vond ir zu anworten. Es gibt in .NET eine Klasse IPGlobalProperties. Von der kriegst du eine Liste mit Tcp Connections, die kannst du durchgehen und schauen, ob eine auf dem von dir gewünschten Port lauscht.
    Wenn du mit TcpListener auf einem bereits benutzten Port lauschen willst, kriegst du wenn ich mich recht erinnere eine Exception.
    Mehrere Prozesse können nicht aufdemselben Port Daten empfangen, zumindest nicht so einfach und nicht mit "Bordmitteln".



  • Ich kannte IPGlobalProperties nicht. Ist zwar toll dass ich die Klasse jetzt kenne (könnte mal nützlich werden), aber in dem Fall hier mMn. total unangebracht.

    Wenn man einfach nur irgend einen Port will, dann lässt man das OS den Socket einfach an einen beliebigen freien Port binden.
    Und wenn man einen speziellen braucht, dann bindet man den Socket einfach explizit an diesen, und bekommt eben im Falle des Falles einen Fehler.

    In keinem Fall macht es Sinn vorher die Liste der aktiven TCP Connections durchzugehen. Vor allem da das für mich nach einer Sache klingt die Admin-Rechte benötigt. Und ich hasse Programme die wegen irgendwelcher seltsamen Design-Entscheidungen des Programmierers Admin-Berechtigungen benötigen.

    EDIT: OK... hab gerade nenstat probiert, und das geht erschreckenderweise ohne Admin-Rechte. Uff. Das Argument zieht also schonmal nicht. Ich finde es aber trotzdem unangebracht. Ich guck ja im Normalfall auch nicht vorher nach ob es ein File mit nem bestimmten Namen schon gibt bevor ich eins anlege.



  • Gut, danke, dann hätte ich schon mal die allgemeine Vorgehensweise, mehr brauche ich eigentlich nicht.



  • hustbaer schrieb:

    aber in dem Fall hier mMn. total angebracht.

    Du meinst unangebracht? Ja, würd ich auch nicht machen. Ich wollte nur die Frage beantworten, wie man rausfindet, ob ein Port frei ist.



  • ARGH!
    Ja, sorry, ich meine unangebracht.
    Hab's korrigiert.
    Danke.


Anmelden zum Antworten