Telnet, Socket und der Linemode.
-
Hallo Community,
Ich probiere gerade,nach dem ich mir ein bisschen die Sockets angeguckt habe, einen kleinen 'telnetserver' zu bauen - naja im Grunde will ich mich nur per Telnet auf den Socket verbinden können, und Text schicken - allerdings nicht per Zeichen soner per Line. Laut der Telnet Doku gibt es einen Linemode, aber irgendwie bekomm ich es nicht gepacken das es jenen benutzt so wie es im moment ist schickt er zwar, aber auch wieder nur per Buchstabe und ich habe keien Ausgabe mehr.
Wäre cool wenn mir da jemand helfen könnte.
#include <iostream> #include <stdlib.h> #include <winsock2.h> #include <windows.h> #define SERVER_PORT 5432 #define RECV_BUF_MAXLEN 256 #define SEND_BUF_MAXLEN 256 //Telnet Code definition: #define CMD_IAC 255 #define CMD_WILL 251 #define CMD_WONT 252 #define CMD_DO 253 #define CMD_DONT 254 #define CMD_LINEMODE 34 #define CMD_GOAHEAD 3 #define CMD_ECHO 1 using namespace std; long WinsockStartup();//proto int main() { long rc; SOCKET sockListen; SOCKET sockConnected; SOCKADDR_IN addr; int addrlen = sizeof(addr); char sendBuf[SEND_BUF_MAXLEN+1]; char recvBuf[RECV_BUF_MAXLEN+1]; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_family = AF_INET; addr.sin_port = htons(SERVER_PORT); const char linemode[] = {CMD_IAC, CMD_DO, CMD_LINEMODE, 0}; // Auf Linemode setzen const char echomode[] = {CMD_IAC, CMD_WILL, CMD_ECHO, 0};// Auf Echo Mode setzen rc = WinsockStartup(); //Initialisierung des Socktest (Funktion siehe unten) sockListen=socket(AF_INET,SOCK_STREAM,0); //listen Socket init rc = bind(sockListen, (SOCKADDR*)&addr, sizeof(addr)); //listen socket an Port binden rc = listen(sockListen, 0); //listen on listen;) cout << "Waiting for a connection..." << endl; sockConnected=accept(sockListen, (SOCKADDR*)&addr, &addrlen); send(sockConnected,linemode,strlen(linemode),0); send(sockConnected,echomode,strlen(echomode),0); rc = send(sockConnected,"Hallo, Linemode?! \0",6,0); cout << rc << " Bytes sent !" << endl; while(1) { rc = recv(sockConnected,recvBuf,RECV_BUF_MAXLEN,0); recvBuf[rc] = '\0'; cout << rc << " Bytes angekommen: " << recvBuf << endl; cout << rc << " Bytes gesendet ." << endl; } } long WinsockStartup() { long rc; WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(2, 1); rc = WSAStartup( wVersionRequested, &wsaData ); return rc; }
-
Hi !
Dein Server funktioniert.
Er funktioniert noch besser, wenn du die Endlosschleife in Zeile 56 rausnimmst.

-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.