Frage

Wir haben einige alte Serien Code bekam, die eine serielle Schnittstelle überprüft, ob durch einfaches Öffnen und dann Schließen es verfügbar ist. Nun fügen wir Netzwerk-Support für die App Ich mag die Funktion verwenden, indem die IP-Adresse als String zu liefern.

/**
 * So far I have tried:
 * A passed in portPath normally looks like:
\\?\acpi#pnp0501#1#1#{GUID}          
10.2.0.155:2001
//10.2.0.155:2001/
\\.\10.2.0.155:2001\
\\?\10.2.0.155:2001\
 * all without success.
 */
    bool PortIsAvailable( const CString& portPath )
    {
        HANDLE hCom = ::CreateFile( portPath,
                                   GENERIC_READ | GENERIC_WRITE,
                                   0,                    // comm devices must be opened with exclusive-access
                                   NULL,                 // no security attributes
                                   OPEN_EXISTING,        // comm devices must use OPEN_EXISTING
                                   FILE_FLAG_OVERLAPPED, // not overlapped I/O
                                   NULL );                // hTemplate must be NULL for comm devices
        if (INVALID_HANDLE_VALUE != hCom ) 
        {
            ::CloseHandle( hCom );
            return true;
        }
        return false;
    }

Ich weiß, dass ich durch Abschaltung gefolgt connect verwenden könnte, aber ich möchte die Funktion mit minimalen Änderungen wiederzuverwenden. Wenn ich die Funktion wieder verwenden um so besser. Wenn nicht, dann werde ich Code schreiben, der bestimmt, ob es sich um eine Buchse ist oder nicht.

Ich habe mich gefragt, was die richtige Art und Weise eine Buchse über Create der Öffnung ist?

War es hilfreich?

Lösung

Sie können keine Steckdose über Createfile erstellen. Sie sollten die Fenster verwenden Socket-API für diese Zweck. Für den Sockel Griff zu erstellen, verwenden Sie WSASocket . Beachten Sie, dass die Buchse von dieser Funktion zurück können verwendet werden, wie Windows mit einigem Griff Windows-Funktionen, wie Readfile und Writefile .

Andere Tipps

Ich glaube nicht, dass Sie Steckdosen mit CreateFile() manipulieren können. Sockets ist eine Abstraktion von BSD importiert (IIRC) und in einer Namen-kompatible Art und Weise implementiert (ursprünglich über winsock.h und winsock2.h zur Zeit). Ich glaube nicht, MS jemals Unterstützung für Sockets CreateFile() hinzugefügt.

Weitere Gründe: Die meisten (? Alles) CreateFile() manipuliert gibt einen nativen Windows-Handle. Da Steckdosen eine nicht-native Abstraktion sind, dass sie nicht über eine native Griff in dem O haben, so wäre es nicht sinnvoll, für CreateFile() sich zu behandeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top