mariottide (Normal User)
Newbie
Messaggi: 7
Iscritto: 07/09/2012
|
Salve, ho fatto un programma che in teoria scatta una foto dello schermo e dovrebbe inviare il file (.bmp) dal server al client con i socket (su windows). In locale ho provato a vedere se funzionava e infatti funge. Ma aprendo il server su un pc esterno e provando a inviare il file sul mio client nel mio pc, la foto la scatta e la salva ma non me la invia, anzi si spegne. Vi posto il codice:
Codice sorgente - presumibilmente C/C++ |
//Server
//Questa funziona fa uno screenshot e la salva come C:\\Windows\\dk.bmp
cap();
//Questa funzione invia il file al client
sockServer.SendFile("C:\\Windows\\dk.bmp");
//client
//riceve il file
sockClient.ReceiveFile("Desktop.bmp");
|
I codici delle funzioni sono i seguenti:
Codice sorgente - presumibilmente C/C++ |
//invia
int Socket::SendFile(char*nomefile){
char*buffer;
int size;
ifstream file;
file.open(nomefile, ios::in | ios::binary | ios::ate);
if(!file){
return 1;
} else{}
if(file.is_open()){
file.seekg(0, ios::end);
size = file.tellg();
file.seekg(0, ios::beg);
char*buf;
buf = itoa(size, buf, 10);
send(mySocket, buf, strlen(buf), 0);
buffer = new char[size];
file.read(buffer, size);
send(mySocket, buffer, size, 0);
file.close();
}
//riceve
int Socket::ReceiveFile(char*nomefile){
char*buffer;
char buf[4000];
int i = recv(mySocket, buf, sizeof(buf), 0);
buf[i] = '\0';
int size = atoi(buf);
buffer = new char[size];
ofstream file;
file.open(nomefile, ios::out | ios::binary | ios::ate);
recv(mySocket, buffer, size, 0);
file.write(buffer, size);
file.close();
cout << endl << "File ricevuto con successo!\n";
return 0;
}
|
Spero di essere stato chiaro visto che è la prima volta. |
|
mariottide (Normal User)
Newbie
Messaggi: 7
Iscritto: 07/09/2012
|
Qualcuno mi aiuta!!
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
Se localmente funziona e tra due sistemi remoti no, allora il problema è nella connessione di rete.
Devi prima stabilire se il sistema remoto è contattabile sulla porta che hai scelto e se il router permette la comunicazione (in genere è necessario configurare la porta in ricezione).
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
mariottide (Normal User)
Newbie
Messaggi: 7
Iscritto: 07/09/2012
|
Grazie per la risposta. La connessione non ha problema. Infatti stringhe di testo le invia anche in remoto anche file di testo.
|
|
mariottide (Normal User)
Newbie
Messaggi: 7
Iscritto: 07/09/2012
|
Un'altra cosa: in remoto invia file solo se specifico la grandezza (byte) del file da inviare, se invece lui non la conosce in remoto non funziona mentre in locale sì. Non capisco proprio dove sta il problema
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
Allora è necessario vedere il codice che utilizza le due funzioni per capire meglio.
Sulla questione della lunghezza del file mi sembra che sia anomalo il comportamento in locale.
Se non si sa quando finisce il file, come si fa a riceverlo correttamente (chiudendolo in ricezione)?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
mariottide (Normal User)
Newbie
Messaggi: 7
Iscritto: 07/09/2012
|
allora.. ho fatto la prova in remoto adesso e non invia nemmeno file di cui specifico la lunghezza. Forse hai ragione tu che la connessione ha un problema. Però mi chiedo il perché riesce anche in remoto a inviare stringhe di testo mentre i file no! se vuoi vedere il codice lo postato sopra. Grazie comunque che mi rispondi.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
Allora ... riassumiamo, altrimenti si fa confusione ...
- in locale, funziona tutto
- in remoto riesci ad inviare/ricevere stringhe ... con quale codice ?
- in remoto, nessun file viene inviato/ricevuto ... con il codice che hai mostrato
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
mariottide (Normal User)
Newbie
Messaggi: 7
Iscritto: 07/09/2012
|
Ciò che hai detto è vero. Il mio programma è una backdoor ma non la uso per danneggiare è solo una piccola ambizione che voglio raggiungere. Quindi non pensare che sono un lamer. Dunque il progetto consiste in 3 file:
- main.cpp e la main del progetto
- Socket.h creo le classi con le relative funzioni per il collegamento al server
- Socket.cpp qui riprendo le funzioni del Socket.h mettendo il loro codice
Spero che hai capito. Se vuoi ti allego i file però non lo so se è contro il regolamento.
|
|