Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 56
  1. #1
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563

    C++ Ricevere messaggi da socket

    Salve.
    Ho questo programma
    codice:
    	if (argc != 6)
    		{
    			cout <<"Imbecille non va bene";
    			getchar();
    			return -1;
    		}
    	
    	else
              	 cout <<"Argomenti ok";
    
    	for(int i=1; i<6; i++)
    	{
    		stringa.append(argv[i]);
    		if(i<5)
    			stringa.append("] [");
    		else
    			stringa.append("] ");
    	}
    
    
    
    	WSADATA data;
    	if (WSAStartup(MAKEWORD(2,0),&data) == SOCKET_ERROR)
    		{
    			cout <<"Impossibile inizializzare WSADATA";
    			return -1;
    		}
    		
    	hostent *h = gethostbyname("host.host.it");	
    	SOCKET sock = socket(PF_INET,SOCK_STREAM,0);
    
    	if (sock == INVALID_SOCKET)
    		{
    			cout <<"Socket invalido";
    			return -1;
    		}
    	SOCKADDR_IN SockAddr;
    
    
    
    	SockAddr.sin_port = htons(8000);
    	SockAddr.sin_family = PF_INET;
    	memcpy((char *)&SockAddr.sin_addr, (char *)h->h_addr_list[0], 4);
    
    		cout <<" Connessione al server in corso";
    
    			for (int i = 0; i < 10; i++)
    		{
    			Sleep(50);
    			cout <<".";
    		}
    	cout <<endl;
    	
    	if (connect(sock,(SOCKADDR *)&SockAddr,sizeof(SockAddr)) != 0)
    		{
    		cout <<"Non sono riuscito a connettermi.";
    		return -1;
    		}
    
    	send(sock,"login [ciao] [ciao]",28,0);
    	send(sock,stringa.c_str(),static_cast<int>(stringa.length()),0);
    	send(sock,"quit",4,0);
    	
    
    			for (int i = 0; i < 10; i++)
    		{
    			Sleep(50);
    			cout <<".";
    		}
    
    	cout <<endl;
    	
    	shutdown(sock,0);
    	closesocket(sock);
    	WSACleanup();
    	return 0;
    }
    Come potete vedere questo codice si connette ad un server ad una data porta ed invia una serie di dati.
    Normalmente il server per ogni stringa inviatagli da una risposta, che nel mio programmino non viene per niente considerata. Come posso ricevere le stringhe con cui il server risponde ai miei comandi?
    So che si usa la funzione recv, ma non saprei come creare un adeguato ciclo, perchè come faccio a sapere quando il server mi sta inviando qualcosa?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    yeah
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    up
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    12
    dovrebbe essere

    codice:
    recv(sock,str,100,0);

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    So che si usa la funzione recv, ma non saprei come creare un adeguato ciclo, perchè come faccio a sapere quando il server mi sta inviando qualcosa?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    eeehiii
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Possibile che non ci siano soluzioni?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    aiutatemi!!!
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il processo di comunicazione deve, in pratica, essere un grande "ciclo" in cui

    1) controlli se ci sono dati in ricezione e in caso affermativo li ricevi

    2) se hai ricevuto dati, li processi

    3) controlli se devi inviare dati e in caso affermativo li trasmetti

    4) se il programma non deve terminare, torni al passo 1

    Escludendo la gestione asincrona dei socket (che per ora non ti consiglio di affrontare), devi impostare il tuo programma in questo modo ...

  10. #10
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ecco, il punto 2 è
    controlli se ci sono dati in ricezione e in caso affermativo li ricevi
    Per ricevere uso recv, ma come controllo se ci sono dati in ricezione? Mi serve proprio la funzione per controllare
    E poi, perchè strutturare tutto in un grande ciclo? Io devo solo inviare un paio di stringhe e chiudere non è mica un continuo scambio di dati...
    Sai non è che me ne intenda molto di queste cose, per ora.
    Ma per caso esiste un bel librone italiano sulle Api di Windows?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.