Va bene anche il 6
ok perfetto...
dunque:
il "centro di controllo client" e la "shell server" vanno...
il problema è il loro opposto, ovvero:
"centro di controllo server" e la "shell client"
grazie ancora ciao
La prima osservazione (generale) riguarda queste linee di codice
Se la connessione non avviene, tu mostri il messaggio ... ma continui tranquillamente ad eseguire il resto del programma!codice:sendrecv = InitClientSocket("127.0.0.1", 4444); if (sendrecv == 0){ MessageBox(0,"connessione non avvenuta","shell",MB_OK); }
eh si... hai ragione...ma comunque nelle prove che ho fatto fin ora apro sempre prima il server, quindi nn mi ha mai dato quell'errore...
nient'altro?? non credevo fosse un problema così difficile....![]()
C'e' anche da dire che in questo ciclo
se la recv non opera correttamente (per un qualsiasi motivo) e restituisce un errore, tale errore non viene testato e il codice restituito (iBytes) viene comunque considerato un valore valido, con ovvie conseguenze.codice:while(TRUE) { iBytes = recv(sServerSock,pBuffer,2000,0); pBuffer[iBytes] = '\0'; printf("%s",pBuffer); if(pBuffer[iBytes-1] == '>') break; }
gia...
ma il problema è che non capisco xche quando la shell è il server il codice va alla perfezione (tranne per il fatto che se chiudo il server il client mi da errore per il motivo che mi hai appena postato)... ho solo invertito il metodo di connessione... il resto è invariato...![]()
Intanto devi evitare che un errore che avviene durante la recv possa generare il problema di accesso in memoria ... poi, dal codice dell'errore, comprendi perche' in una determinata situazione, si genera l'errore ...
quindi hai trovato l'errore???Originariamente inviato da oregon
Intanto devi evitare che un errore che avviene durante la recv possa generare il problema di accesso in memoria ... poi, dal codice dell'errore, comprendi perche' in una determinata situazione, si genera l'errore ...![]()
ok grazie al tuo consiglio ho aggiunto al mio codice questo
e mi è appunto uscito il segnale di errore che avevo impostato, ovvero in questo caso RECV() ERRORcodice:while(TRUE) { iBytes = recv(sendrecv,pBuffer,64000,0); if (iBytes<0){ printf("\nRECV() ERROR\n"); break; } pBuffer[iBytes] = '\0'; printf("%s",pBuffer); if(pBuffer[iBytes-1] == '>') break; }
quindi il problema è che il client non riesce ad assegnare lo standard input di cmd.exe direttamente alla socket, giusto???