Newsgroup: it.comp.lang.c++
Titolo: telnet client

Salve a tutti,
ho fatto un programmino stupidissimo che dovrebbe simulare un telnet client.
La creazione della socket e la connessione va a buon fine. Poi inizio a
leggere all'interno di un ciclo while; al primo ciclo leggo con la recv(...)
e faccio la printf, risultato 12 byte di caretteri strani; al secondo ciclo
mi si pianta sulla recv(...) e resta li in attesa di chi sa cosa. Qual è il
problema? Qualcuno sa spiegarmi come si fa un telnet client? In giro si
trova poca documentazione. Ho controllato l'RFC del telnet, mi è sembrato
molto chiaro, ora il mio dubbio è: per fare una connessione telnet devo
inviare io (client) per primo qualche carattere speciale? Non basta la
semplice connect(...) e poi la recv(...) e la send(...)? Grazie in anticipo
a chiunque risponderà. Ciao.
P.S.
Il telnet del windows funziona regolarmente
Questo è il codice:
#include <stdio.h>
#include "winsock2.h"
void main() {
    // Initialize Winsock.
    WSADATA wsaData;
    int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
    if ( iResult != NO_ERROR )
        printf("Error at WSAStartup()\n");
    // Create a socket.
    SOCKET m_socket;
    m_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
        if ( m_socket == INVALID_SOCKET ) {
        printf( "Error at socket(): %ld\n", WSAGetLastError() );
        WSACleanup();
        return;
    }
    // Connect to a server.
    sockaddr_in clientService;
    clientService.sin_family = AF_INET;
    clientService.sin_addr.s_addr = inet_addr("192.168.0.7");
    clientService.sin_port = htons(23);
    if ( connect( m_socket, (SOCKADDR*) &clientService,
sizeof(clientService) ) == SOCKET_ERROR) {
        printf( "Failed to connect.\n" );
        WSACleanup();
        return;
    }
// Send and receive data.
    int bytesSent;
    int bytesRecv = SOCKET_ERROR;
    char sendbuf[32] = "Client: Sending data.";
    char recvbuf[255] = "";
    while( true ) {
        bytesRecv = recv( m_socket, recvbuf, sizeof(recvbuf), 0 );
        if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
            printf( "Connection Closed.\n");
            break;
        }
        if (bytesRecv < 0)
            return;
        printf( "Bytes Ricevuti: %ld\n", bytesRecv );
printf( "Messaggio ricevuto: %s\n", recvbuf);
    }
    return;
}

 }
qui si parla di C++ standard, nel quale non esiste il concetto di socket 
e similari - prova a chiedere piuttosto su it.comp.programmare.win32
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

 e similari - prova a chiedere piuttosto su it.comp.programmare.win32
A me va bene pure quello, basta che mi spiegate come si fa un telnet client.

 A me va bene pure quello, basta che mi spiegate come si fa un telnet
client.
Le socket non rientrano nello standard C++, quindi sei comunque OT.
Però ti consiglio di guardarti le istruzioni select (o poll) per controllare
lo stato della socket e fcntl per settare le opzioni che vuoi (ad es. per
rendere la socket non bloccante)

 A me va bene pure quello, basta che mi spiegate come si fa un telnet client.
In C++ standard non e' possibile.
Ciao,
Nicola

> In C++ standard non e' possibile.
Scusate la mia ignoranza ma in C++ standard non è possibile fare connessioni
di rete? Mi sembra strano, visto che tutti i linguaggi di programmazione lo
permettono. Grazie.

...

Veramente di solito lo consentono le primitive di sistema. Alcuni
linguaggi incorporano nella loro libreria standard meccanismi
specifici di sistema; non e' il caso del C++.
Ciao,
Nicola