2009-04-01 7 views
5

Ich mache ein Projekt, in dem ich eine Netzwerkbibliothek für ein Gerät schreiben muss, das an eine Windows-Maschine angeschlossen ist. Die Komplikation besteht darin, dass ich nur über Ethernet-Frames mit dem Gerät kommunizieren darf. Es gibt also überhaupt kein TCP/UDP/IP. Ich glaube nicht, dass der bind/listen/accept-Ansatz hier angewendet werden kann, aber vielleicht irre ich mich. Außerdem ist kein Routing oder Switching beteiligt.Windows-Netzwerk mit nur Ethernet-Frames

Ich habe ein paar Fragen. Wie verwende ich einen Socket, um mit diesem Gerät zu kommunizieren? Unterstützt Winsock nur Frames? Ich konnte nicht viele Ressourcen dazu finden. Hat jemand irgendwelche Ideen, wie ich vorgehen soll?

Ist die Verwendung von Sockets auch eine gute Idee oder kann ich nur die Informationen mit den entsprechenden Überschriften senden?

+0

Ich habe keine Ahnung, aber es klingt wirklich interessant in einer vermasselten Art und Weise –

+0

Es gibt keine solche Buchse auf der Sicherungsschicht. – BobbyShaftoe

Antwort

2

Verwenden Sie WinPCap, es hat eine API zum Senden und Anhören von Rohdaten.
Sie können Ihre Kommunikationsebene damit aufbauen.

+1

winPCap ist viel langsamer beim Senden als WinDDK Beispiel NdisProt. Das sollte etwas erzählen – Ulterior

1

Geben Sie die WinAoE code einen Blick - sehen - es lässt Windows mit ATA über Ethernet-Geräte sprechen, was bedeutet, dass es ohne eine der oberen Schichten des Netzwerk-Stack kommunizieren muss.

Edited:

So nahe, wie ich sagen kann, wenn Sie rohe Ethernet-Frames senden wollen, möchten Sie NdisSend und Freunde.

+0

http://msdn.microsoft.com/en-us/library/ff554712.aspx <--- neuer Link zu NdisSend –

+0

@ Prof.Falken Jetzt ist es abgeschrieben. – Navin

-1

Neben winpcap und NDIS können Sie auch Raw-Sockets betrachten, die ein Standardteil der Windows-API sind und nicht erfordern, dass Sie den Treibercode http://msdn.microsoft.com/en-us/library/ms740548(v=vs.85).aspx schreiben.

+2

Raw-Sockets ermöglichen das Senden von Paketen auf IP-Ebene, nicht jedoch auf der Ethernet-Ebene. – bearda