Mein eigenes Telnet - funzt net
-
Hallo,
ich hab heute einer meiner ersten C++- Anwendungen geschreiben, die Winsock benutzen und es funzt net. Schaut es euch an:#include <iostream.h> #include <windows.h> #include <stdlib.h> int starting(void); int main() { SOCKET s; SOCKADDR_IN addr; long rc; char theip[256]; int theport; system("cls"); cout << "\n\t\tMY TELNET"; cout << "\n\t\t~~~~~~~~~\n\n"; rc = starting(); if (rc != 0) { cout << "Fehler 01: Internetzugriff gescheitert. Code: " << WSAGetLastError() << endl; system("pause"); return 1; } s = socket(AF_INET, SOCK_STREAM, 0); if (s == INVALID_SOCKET) { cout << "Fehler 02: Vorbereitung für Verbindung gescheitert. Code: " << WSAGetLastError() << endl; system("pause"); return 1; } cout << "Geben Sie die IP- Adresse ein: "; cin >> theip; cout << "\nGeben Sie den Port ein: "; cin >> theport; memset(&addr, 0, sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(theport); addr.sin_addr.s_addr=inet_addr(theip); rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR)); if (rc == SOCKET_ERROR) { cout << "\nFehler 03: Verbindung misslungen. Code: " << WSAGetLastError() << endl; system("pause"); return 1; } char buf[256]; for (;buf=="1";) { rc = recv(s, buf, 256, 0); cout << "\nEmpfangen: " << buf << endl; cout << "Senden (1 zum beenden): "; cin >> buf; rc = send(s, buf, 256, 0); } cout << "\nVerbindung unterbrochen, " << theip << ":" << theport << endl; return 0; } int starting(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0), &wsa); }
Ich vermute es ist was wegen der for- Schleife. Sagt mir,w as ich falsch gemacht hab.
-
Du kannst char-Arrays nicht einfach per == vergleichen. Nimm einfach lstrcmp, das dürfe dann funktionieren :).
cya
-
Original erstellt von MagiC Creator:
**Du kannst char-Arrays nicht einfach per == vergleichen. Nimm einfach lstrcmp, das dürfe dann funktionieren :).cya :)**
Und wie benutze ich das? Zeig es mir bitte!
--> Bis jetzt habe ich nämlich immer nur den Datentyp "string" für Strings benutzt.
[ Dieser Beitrag wurde am 08.02.2003 um 12:38 Uhr von pAngel editiert. ]
-
std::string kannst du hier ja auch benutzen :). Aber hier ein kleines Beispiel für lstrcmp:
// ... char buf[256]; strcpy(buf, "blubb"); if(lstrcmp(buf, "blubb") == 0) { IrgendeineAusgabeFunktion("Ja, sie sind in der Tat gleich..."); } // ...
cya
EDIT: Außerdem würde mich mal interessieren, wie in buf die "1" reinkommt ;):
char buf[256];
for (;buf=="1";)
Du könntest natürlich vor der for-schleife noch ein strcpy machen und die "1" reinkopieren...
[ Dieser Beitrag wurde am 08.02.2003 um 12:55 Uhr von MagiC Creator editiert. ]
-
Wenn du nur eine Zahl < 10 vergleichen willst, wäre ein buf[0] == '1' ausreichend.
Allerdings wäre sowas wie strcmpi(buf,"terminate telnet") oder sowas sinnvoller
-
Ich will eine Verbindung zum Server erstellen, und wenn "1" eingetippt wurde, dass es beendet wird.
Gibt es vielleicht eine Möglichkeit mit "string"? char mag ich nicht so und ich kenn mich damit auch nicht so aus.
Das Problem mit "string" ist nur, dass der 2. Parameter von send() z.B., ein char sein muss. Wie geht das?
-
Wenn du aus einem std::string einen c-string machen willst, dann geht das so:
// ... std::string mein_string = "Ja der String ;)"; eineFunktionDieEinenCStringWill(mein_string.c_str()); // ...
Also mit der Memberfunktion "c_str".
cya
-
Jetzt gehts.
Danke für eure Hilfe.