Win Socks Verständnisfrage
-
Hi, wollte mich heute mit Winsocks anfangen zu beschäftigen.
Also mal gleich n tutorial rausgesucht:
http://www.c-worker.ch/tuts/wstut_op.php
und versucht den folgenden Code zu compilen
#include <windows.h> #include <winsock2.h> #include <stdio.h> //Prototypen int startWinsock(void); int main() { long rc; rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }Das ganze habe ich mit Code::Blocks compiled
mit folgendem error
(.text+0x87)||undefined reference to `_WSAStartup@8'|
||=== Build finished: 1 errors, 0 warnings ===|Des Weiteren wurde eine
.O Datei im gleichen Ordner erstellt mit seltsamen Zeichen als Inhalt
Was mach ich falsch?
-
Huhu,
du machst nichts falsch. Du hast bloß was vergessen

Du hast vergessen die Winsock lib zu linken.
Wenn du Visual C++ benutzt, dann schreib einfach bei den Includes das hier rein:
#pragma comment(lib, "ws2.lib")ansonsten musst du die Lib suchen und linken.
-
Sunny31 schrieb:
Huhu,
du machst nichts falsch. Du hast bloß was vergessen

Du hast vergessen die Winsock lib zu linken.
Wenn du Visual C++ benutzt, dann schreib einfach bei den Includes das hier rein:
#pragma comment(lib, "ws2.lib")ansonsten musst du die Lib suchen und linken.
Ich dachte die winsock lib ist hier drin? :/?
#include <windows.h>
#include <winsock2.h>
Habe versucht bei link libraries ws2.lib einzugeben. ging auch problemlos jedoch beim compilen kam dann:
ld.exe||cannot find -lws2.lib|
||=== Build finished: 1 errors, 0 warnings ===|
-
Bei mir heißt die einzubindende Lib "wsock32" - die Endung wird wohl .a oder .lib sein, allerdings muss ich die nicht angeben. Probier's mal damit.
-
Stiefel2000 schrieb:
Bei mir heißt die einzubindende Lib "wsock32" - die Endung wird wohl .a oder .lib sein, allerdings muss ich die nicht angeben. Probier's mal damit.
Vielen dank so klappts nun
!
-
Dann hab ich auch gleich noch ne Frage

und zwar nun ist es mir gelungen eine Verbindung zwischen 2 sockets herzustellen.
Nun will ich einen String mit hilfe der send function zwischen den 2 programmen hin und her schicken.
Server:
send(connectedSocket,"hallo",9,0);
Client:
recv(s,buffer,256,0)
jedoch klappt das ganze nicht so wie ich will denn es passiert genau garnichts

Hab das ganze nicht wirklich verstanden mit send und recv gibts da irgendwo n einfaches tutorial dazu?
Oder kann mir jemand erklären wie ich ganz simpel zwischen einer verbunden client.exe und server.exe einen String schicke?
-
Solang du einfach nur send() und recv() nutzt, musst du ein wenig aufpassen, da es sich um blockende Funktionen handelt.
Da ich mich selbst erst vor ein paar Tagen in das Thema eingearbeitet habe, hier ein Link zu einem Tutorial. Ich habe auch küzrlich irgendeinen Thread eröffnet, in dem es noch ein paar mehr Links geben sollte. Allerdings will ich den jetzt nicht suchen.
http://www.online-tutorials.net/netzwerk/winsock-tutorial-teil-3-udp/tutorials-t-10-7.htmlAls zu sendendes Datenpaket habe ich mir übrigens eine Union ausgesucht, ist dafür ungeheuer nützlich.
Viel Erfolg mit deinen Sockets!
-
Stiefel2000 schrieb:
Solang du einfach nur send() und recv() nutzt, musst du ein wenig aufpassen, da es sich um blockende Funktionen handelt.
Da ich mich selbst erst vor ein paar Tagen in das Thema eingearbeitet habe, hier ein Link zu einem Tutorial. Ich habe auch küzrlich irgendeinen Thread eröffnet, in dem es noch ein paar mehr Links geben sollte. Allerdings will ich den jetzt nicht suchen.
http://www.online-tutorials.net/netzwerk/winsock-tutorial-teil-3-udp/tutorials-t-10-7.htmlAls zu sendendes Datenpaket habe ich mir übrigens eine Union ausgesucht, ist dafür ungeheuer nützlich.
Viel Erfolg mit deinen Sockets!
Danke, aber sendto und recvfrom gehen doch nur bei UDP Sockets oder? Ich bräuchte aber send/recv ganz normal für einen TCP Socket
und das senden wird für tcp sockets leider in dem tut nicht angesprochen 
-
Kann mir niemand kurz helfen :/?
Szenario:
TCP SOCKET:
Client:
Socket s;
char buf[256];...verbidnung zu server hergestellt....
buf="hallo";
send(s,buf,9,0);Server:
Socket acceptSocket;
...verbindung zu client hergstellt....char buf[256];
recv(acceptSocket,buf,256,0);Der Verbdinungsaufbau klappt problemlos jedoch sobald ich irgendwas mit hin und her schicken will passiert einfach nichts. Wo liegt der denkfehler=?
-
Ich dachte, du würdest wenigstens sehen, dass der Link zu Kapitel 3 eines Tutorials über WinSock führt - in Kapitel 1 geht es um TCP-Verbindungen.
Du musst deine Sockets asynchron machen, indem du z.B. mit select() oder WSAAsyncSelect() arbeitest. Anders wirst du nur wenig Erfolg haben.(Hier noch der Link zu Kapitel 1: http://www.online-tutorials.net/netzwerk/winsock-tutorial-teil-1-grundlagen-und-tcp/tutorials-t-10-5.html)