Newsgroup: it.comp.lang.c++
Titolo: [SOCKET] - C++ Builder, non riesco ad inviare dati :-(

Ciao,
sto cercando di capire come funzionano i socket in c++ builder, sono
riuscito a stabilire correttamente la connessione (o almeno cosi'
sembra), ma non riesco ad inviare una stringa.
Dopo aver verificato che la connessione client/server sia avvenuta
correttamente, clicco su un bottone a cui ho associato il seguente
codice:
void __fastcall TForm1::Server_SendTextClick(TObject *Sender)
{
    ServerSocket1->Socket->SendText("My Text");
}
e ricevo sempre l'errore "...raised exception ESocketError...
message: "windows socket error (10057), on api 'send'..."
Dove sbaglio? Qualcuno sa come si fa ad inviare qualcosa quando si
verifica un certo evento?
Grazie a tutti,
Saluti,
Remo Franceschelli - 
r.franc...@flashmail.com
http://www.geocities.com/SiliconValley/Lakes/7668/
ICQ# 25535629

 verifica un certo evento?
Bisogna vedere COME hai verificato la connessione...
Il funzionamento dei sockets, e dei componenti VCL che li inglobano, non e`
particolarmente complesso, ma neppure cosi` semplice. Da quello che scrivi, in
cui non dai nessuna notizia sul contesto e sull'impostazione del tuo programma,
non vedo come ti si possano dare indicazioni. Ti consiglio, se non lo hai gia`
fatto, di leggere il capitolo "Working with sockets" della "Developer's Guide"
e, se non trovi la risposta alle tue domande, oppure se qualcosa non ti risulta
chiaro, riscrivi.
Saluti
Paolo

 ha scritto:

Ciao,
grazie per avermi risposto.
Il problema, in pratica, e' questo: sto semplicemente cercando di
realizzare un programma di prova dei componenti vcl socket, perche'
tra non molto dovro' utilizzarli in un programma "vero". Il mio
obiettivo e' solo quello di inviare un testo dal server al client e
viceversa.
Ho cercato esempi in c++ builder, ma ho trovato solo un chatter per
mfc :-(, per cui se qualcuno avesse per caso qualche riga di esempio
mi farebbe un grande favore a spedirla.
Per fare la mia prova, ho inserito in un form alcuni bottoni, una
TEdit, un TServerSocket e un TClientSocket, ho impostato alcune
proprietà (port e host, le altre hanno i valori default) e ho inserito
il codice appropriato per i pulsanti "Server_Open", "Client_Open",
"Server_Close" e "Client_Close" (ovvero Componente->Open() e
Componente->Close()) e il codice sopra per il pulsante "Send_Text", e
il seguente codice 
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
// AddLine aggiunge una riga di testo alla
// mia TEdit
    AddLine("Client: OnRead...");
    AddLine((AnsiString("Client: Received: ") +
        Socket->ReceiveText()).c_str());
}
Ecco la sequenza degli eventi che vengono generati durante una
connessione/disconnessione:
(Server_Open)
Server: OnListen...
(Client_Open)
Client: OnLookup...
Client: OnConnecting...
Client: OnConnect...
Server: OnClientConnect...
Server: OnAccept...
(Client_Close)
Client: OnDisconnect...
Server: OnClientDisconnect...
(Server_Close)
Mi sembra quindi che connessione venga stabilita correttamente,
infatti anche "netstat -a" indica una connessione stabilita alla porta
2222.
Pero' appena premo "Send_Text" (naturalmente quando la connessione e'
attiva) viene generato l'errore che ho descritto sopra. Credo di
sbagliare qualcosa nell'invio del testo.
Hai qualche suggerimento?
Grazie,


 Hai qualche suggerimento?
Prova a inviare il testo direttamente nel gestore dell'evento OnClientConnect
del server e, nel caso l'errore si verificasse ancora, controlla il codice
d'errore sulla documentazione di winsock per vedere di cosa si tratta
esattamente.
Ciao
Paolo

Remo Franceschelli wrote:

Grazie, sono poi riuscito a risolvere il problema.
Sbagliavo perche' usavo direttamente la proprieta' Socket del server
per inviare il testo invece di usare l'oggetto Socket passato
nell'evento OnClientConnect.
Saluti,
