C++ Netzwerk-/Socketprogrammierung
-
Klingt für mich so, als hättest Du kein Konsolenprojekt angelegt, aber eine main - Funktion definiert ...
-
Habe es als Konsolenprogramm probiert und als Windowsprogramm, aber beides mal der gleiche Error.
Mein Code(aus dem Tutorial auch schön kommentiert):
//Include the needed header files. //Don't forget to link libws2_32.a to your program as well #include <winsock.h> SOCKET s; //Socket handle //CONNECTTOHOST – Connects to a remote host bool ConnectToHost(int PortNo, char* IPAddress) { //Start up Winsock… WSADATA wsadata; int error = WSAStartup(0x0202, &wsadata); //Did something happen? if (error) return false; //Did we get the right Winsock version? if (wsadata.wVersion != 0x0202) { WSACleanup(); //Clean up Winsock return false; } //Fill out the information needed to initialize a socket… SOCKADDR_IN target; //Socket address information target.sin_family = AF_INET; // address family Internet target.sin_port = htons (PortNo); //Port to connect on target.sin_addr.s_addr = inet_addr (IPAddress); //Target IP s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); //Create socket if (s == INVALID_SOCKET) { return false; //Couldn't create the socket } //Try connecting... if (connect(s, (SOCKADDR *)&target, sizeof(target)) == SOCKET_ERROR) { return false; //Couldn't connect } else return true; //Success } //CLOSECONNECTION – shuts down the socket and closes any connection on it void CloseConnection () { //Close the socket if it exists if (s) closesocket(s); WSACleanup(); //Clean up Winsock }Komme einfach nicht weiter alles schon probiert

Gruß
silent12
-
Du hast keine main - Funktion!
-
Einfach in ein Header oder Source File folgende Zeile einfügen:
#pragma comment (lib, "ws2_32.lib")
-
Die Zeile: #pragma comment (lib, "ws2_32.lib") ändert auch nichts...wie kann ich da die main-function einbauen ?
Gruß
silent12
-
Schreib unter Deinen obigen Quelltext folgende Zeilen:
int main() { }
-
Perfekt thx klappt :)...gehört da nicht noch ein return 0; rein ?
Gruß
silent12
-
Wenn du schnell zu einem Ziel kommen willst, kann ich dir SFML.Network empfehlen. Wäre plattformunabhängig, bietet wahrscheinlich aber weniger Low-Level-Konfigurationsmöglichkeiten.
-
silent12 schrieb:
Perfekt thx klappt :)...gehört da nicht noch ein return 0; rein ?
Gruß
silent12Nein. Bei main() ist return 0 optional.
-
Führt man Winsocket Programme standartmäßig als Konsolenanwendung aus ?
Gruß
silent12
-
hi
nein. sockets kannst du in jeder art von anwendung verwenden. ich glaub das es erst bei driver-entwicklung einschraenkungen gibt.
du kannst dir sockts wie dateien vorstellen.das ist ein recht gutes buch zur socket programmierung welches ich gerne verwende. vielleicht bekommst du das ja in einer bibliothek zum ausleihen.
Meep Meep
-
Danke für die vielen Tipps

Eine Frage hätte ich trotzdem noch:
Wenn ich die main-function einfach nur ans Ende hinsetze, dann kann ich doch in dem Code darüber keine Ausgaben machen oder ?
Wenn doch wie würde das gehen ? Mit Funktionsaufrufen ?Gruß
Tim
-
Lies dir doch lieber erstmal ein ordentliches Buch zum Thema C++ durch, bevor du dich mit etwas befasst von dem du nicht einmal 10 Prozent verstehst.
-
Auf genau so eine Antwort habe ich irgendwie schon gewartet.

Aber damit das nicht so bleibt und ich außer Schleifen und Arrays... nichts mit C++ kann, will ich mehr lernen.
Nur finde ich immer nur Tutorials generell zu C++ die nur Schleifen, Arrays,... erklären und nicht tiefergehen.
Deshalb wollte ich jetzt mit der Socket-Programmierung anfangen, da es dort wenigstens andere Tutorials gibt
Würde mich SEHR über gute Tutorials (siehe oben) freuen.
Gruß
Tim
-
In Socket-Tutorials wird erklärt wie man mit Sockets umgeht - C++ wird dir da keines beigebracht.
Und da fehlt's noch an ganz grundlegenden Dingen wenn du Fragen stellst wie...Wenn ich die main-function einfach nur ans Ende hinsetze, dann kann ich doch in dem Code darüber keine Ausgaben machen oder ?
Wenn doch wie würde das gehen ? Mit Funktionsaufrufen ?
-
-
Da wird wenigstens mal etwas zu C++ erklärt, was ich nicht kenne.
Danke für das Tutorial zur Socket-Programmierung
Werde ich machen sobald ich diesen Error hier behoben habe:
//Add a carriage return and line feed before sending data char szTemp[len+100];Definition von len:
int len = GetWindowTextLength(GetDlgItem(hdwnd, ID_EDIT_SEND));Error:
Konstanter Ausdruck erwartet
Zuordnung eines Arrays der konstanten Größe 0 nicht möglich.
'szTemp': Unbekannte GrößeKann mir bitte noch jemand helfen ? Würde gerne noch ein Programm zum Laufen bekommen, auf das ich dann später sobald ich weitere Tutorials gemacht habe zurückgreifen kann

Gruß
silent12
-
len ist keine konstante und wird erst zur laufzeit abgefragt. dadurch funktioniert das mit einem c-array nicht. nimm z.b. einen vector.
Meep Meep
-
@silent12
Die "statische" Definition eines Arrays mit variabler Länge ist ein C-Feature (VLA - variable length arrays) welches es in C++ nicht gibt.
-
Nur zu meinem Verständnis nochmal:
In len ist doch Textlänge des Childwindows des Windows mit dem Handle hdwnd gespeichert oder ? Dies wird doch über die GetDlgItem-Funktion ermittelt oder ?Und dieser Wert der nicht konstant ist, da er ja erst ermittelt wird, wenn das Window schon erstellt wurde kann nicht in einem Array verwendet werden, da man wie hustbaer gesagt hat, keine statischen Arrays mit variabler Länge erstellen kann oder ?
Bin noch "blutiger" Anfänger, will aber umbedingt mehr lernen.
Kann mir jemand sagen, was ein vector ist und wie ich diesen einbauen kann ?
Ist das soetwas wie ein statisches Array mit variabler Länge ?Mein Status:
Man muss per #include<vector> Vectoren inkludieren.
Man erstellt sie per vector<type> name(12);
also wäre es bei mir doch: vector<long> szTemp(len+100);
,aber wir mit angezeigt, dass vector nicht definiert sei....Gruß
silent12