DirectX Socket Programmierung



  • ad 1) "DirectX-Socket" gibt es nicht. Eigene Begriffe erfinden kommt nicht gut, die checkt nämlich keiner. Du meinst zwar vielleicht es müsste klar sein, ist es aber nicht.

    Falls du DirectPlay meinst, würde ich nimmer verwenden, das ist tot, d.h. wird nicht mehr weiterentwickelt, und wie lange die Runtime noch unterstützt wird ist auch fraglich.

    ad 2) Nein, Routing muss nicht aktiv sein

    ad 3) Ja, wäre möglich.



  • Hallo!

    Ich habe jetzt die Socket-Funktionen der Winsock-DLL genutzt, und im Konstruktor folgendes geschrieben

    m_SocketAddress.sin_family = AF_INET;
    m_SocketAddress.sin_port = 1234;
    m_SocketAddress.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    
    WSAStartup(MAKEWORD(2,0),&m_WSAData);
    m_Socket = ::socket(AF_INET , SOCK_STREAM, IPPROTO_UDP);
    

    Habe noch eine Server Klasse , die von der socket-Klasse erbt!

    Das Programm läuft auch ohne Fehler, aber wenn ich z.b. folgenden Befehl ausführe: telnet 127.0.0.1 1234 , dann kommt folgender Fehler: Verbinden mit der Host ist nicht möglich. Gibt es einen Konsolenbefehl (Windows) der überprüft ,ob ein Server aktiv ist?

    Ich verzweifel so langsam! 😕

    Wäre es auch möglich mit sogenannte Pipes den Datenaustausch zwischen c++-Programm und c# zu realisieren?
    Grüße



  • HelloWorld() schrieb:

    Das Programm läuft auch ohne Fehler, aber wenn ich z.b. folgenden Befehl ausführe: telnet 127.0.0.1 1234 , dann kommt folgender Fehler: Verbinden mit der Host ist nicht möglich. Gibt es einen Konsolenbefehl (Windows) der überprüft ,ob ein Server aktiv ist?

    Wie genau "führst" du diesen "Befehl" "aus"?

    HelloWorld() schrieb:

    Wäre es auch möglich mit sogenannte Pipes den Datenaustausch zwischen c++-Programm und c# zu realisieren?

    Ja



  • Wie genau?

    Ich starte eine Konsole unter Windows XP und gebe den Befehl ein!

    Vor dem starte ich meinen Sever!

    Grüße



  • Und wie sieht dein Server aus? Ich seh da oben nur, dass du ein Socket erzeugst. Ich seh nicht, wie der Server dann funktioniert. Du rufst offenbar nichtmal listen() oder accept() auf, wie soll das also deiner Meinung nach funktionieren?



  • Das mach ich alles:

    ::bind(m_Socket, (SOCKADDR*)&m_SocketAddress,sizeof....
    ::listen
    
    usw.
    

    Den Server rufe ich in einer Endlosschleife auf!

    Server myServer:
    
    whle (true)
    {
    myServer.aktiv();
    }
    

    Wenn das Server Programm und der Client auf unterschiedlichen Rechnern laufen, dann funktioniert es. Aber ich wollte ja den Server und den Client auf einen Rechner starten lassen!

    Muss ich da vielleicht noch was aktivieren unter Windoes Xp?

    Grüße



  • IP richtig? 127.0.0.1?



  • Hallo!

    Die IP habe ich auslesen lassen, und die ist OK. Keine Ahnung warum das nicht funktioniert! Liegt das vielleicht an windows XP?

    Ich habe das Problem aber jetzt mal mit Hilfe sogenannter Pipes versucht zu lösen. Ein Konsolenprogramm (Server) sendet hinter einander zeitlich versetzt 3 Textnachrichten. Mit Hilfe einer Taste kann ich z.b. die erste Nachricht senden!... und Weitere mit erneuten Tastendruck. Eine Windows-Applikation dient als Client, und soll die Nachrichten erhalten. Das klappt auch recht gut, aber wenn ich die Taste dreimal drücke, dann erscheint die Nachricht erst, wenn ich das Windows-Fenster aktiviere!

    Ist die Sache mit den Pipes nicht sonderlich stabil? Sollte ich eine andere Möglichkeit suchen? Was meint Ihr?

    Ich wollte eine C# GUI programmieren, die Benutzereingaben übernimmt, und diese an eine C++-Anwendung weiterleitet! Sind da Pipes überhaupt sinnvoll? Ich brauche eine gute Lösung! Leider klappt das nicht mit Socket-Programmierung 😕

    Grüße 🙂



  • Pipes sind super stabil, Sockets auch und das klappt auch alles wenn man es richtig macht.
    Das Problem wird also bei dir liegen.

    Was Pipes vs. Sockets angeht... selber googeln macht schlau.

    Pipes können halt "mehr" als Sockets - man kann z.B. Zugriffsberechtigungen drauf setzen, man kann den Account abfragen der am anderen Ende zugreift (wenn der Client es erlaubt) etc.
    Dafür sind sie halt Windows-spezifisch, mit allen üblichen Konsequenzen.

    Wenn kein guter Grund besteht Pipes zu nehmen würde ich Sockets nehmen.



  • Hallo kluger hustbaer

    Solche blöden Kommentare kannst Du Dir sparen! Du kennst mich doch garnicht! Behaupte doch nicht einfach, dass etwas an mir liegt! Die Sachen funktionieren ja im Netztwerk! Ich wollte das Client und Server auf dem gleichen Rechner laufen! Und das geht eben nicht! Lese erst einmal richtig den Text durch! Halt Dich doch einfach zurück, und antworte doch nicht auf einen Beitrag, wo Du eh Nichts beitragen kannst! Da kann ich gerne drauf verzichten!
    Oh mann, was für Leute! Bitte nicht antworten! Mit anscheinend klugen Leuten habe ich schon genug zu tun! 😮



  • Hallo infantiler HelloWorld(),

    Wenn es korrekt programmiert ist, dann funktioniert es auch wenn Client und Server auf dem selben Rechner laufen.
    Umkehrschluss: wenn es nicht funktioniert sobald Client und Server auf dem selben Rechner laufen, dann kann es nicht korrekt programmiert sein.

    Ergo: der Fehler liegt bei dir (=in deinem Code).

    Was ist daran jetzt so schwer zu verstehen?

    Da du leider kaum Code zeigst, haben wir auch gar nicht die Chance dir irgendwelche nützlicheren Tips zu geben als "wenn du es richtig machst dann funktioniert es auch".

    Solche blöden Kommentare kannst Du Dir sparen! (...) Mit anscheinend klugen Leuten habe ich schon genug zu tun!

    Re.

    ps:

    HelloWorld() schrieb:

    Die Sachen funktionieren ja im Netztwerk!

    "Aber es funktioniert ja wenn..."
    Standardargumentation von Leuten die keinen Plan von dem haben mit was sie arbeiten.


Anmelden zum Antworten