TCP/IP mit VC++ ?
-
Hallo zusammen,
ich habe eine grundsätzliche Frage:
ich möchte gerne in VC++ eine Leistungsfähige TCP Verbindung implementieren. (Für einen Druck Port Monitor)
Welche Technik sollte ich da benutzen?
Mein Hauptproblem sind die Blocking Eigenschaften von recv(). Ein eigener Thread löst das Problem ja auch nicht, denn ich kann ihn ja nicht mehr sauber beenden sobald recv() steht. Ich würde gerne mit TIMEOUTS arbeiten die der User eingibt. Naja...
Sind diese ganzen Funktionen WSA... zu gebrauchen?
Ich habe auch select(..) probiert, das hat aber nicht richtig funktioniert.
Für eine Idee wäre ich schon mal dankbar!
Grüße,
Christian
-
Ich kann Dir (trotz MFC-Klassen) nur die Verwendung von Winsock2 empfehlen.
Das Problem mit den blockieren kann man auf verschiedene weise umgehen.
Select ist dabei schon mal eine Variante und die andere ist mit Timeout 0 zu arbeiten.Einige wirklich sehr gute Tuturials zu Winsock2 und Client/Serveranwendungen kannst Du hier finden: http://www.c-worker.ch im Bereich Dokus Winsock. Mit den Klassen der MFC habe ich wenig Erfahrungen, ich verwende die Winsock2 immer direkt.
Gruss und schönes WE!
René
-
Danke,
stimmt - Winsock2 funkt!
(Obwohl man doch manchmal neidisch auf die INDY Komponenten schielt ;0)ChrisN
alias MrBurns
-
Ich hab mich mal grob darin eingelesen, und mir scheint, daß die Socket-Funktionen (recv, send, select etc.) weitgehend auch auf Unix-Systemen implementiert sind.
Frage: Hat man diese recht simple Portabilität bei Verwendung von Winsock2-Funktionen ebenfalls oder sind diese arg Windows-spezifisch?
-
Die Winsock oder deren Funktionen sind von den Parametern her identisch mit denen unter Unix, es gibt nur marginale Unterschiede wie:
WIN -> UNIX
send -> write
recv -> read
bind -> bind
listen -> listen
closesocket -> close
usw...Im weiteren benötigt nur Windows eine Initialisierung der Winsock mit WSAStartup() vor Benutzung und die Freigabe nach der Nutzung mit
WSACleanup() beim Programmende. (oder wenn eben icht mehr benötigt)Hier sieht man recht deutlich, das Sockets letztendlich Streams sind, was den
UNIX Streamfunktion read, write, close ect. entspricht.Gruss René
-
Vielen Dank - ein Problem weniger.
