Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: C socket

  1. #1

    C socket

    dunque questo è il mio problema:
    se il client spedisce 1 stringa al server nessun problema:
    Codice PHP:
    //client
    [...]
    send(sdnomestrlen(nome), 0);
    [...]
    //server
    [...]
    recv(temp_sdnomesizeof(nome), 0);
    [...] 
    se invece voglio spedire + valori al server la cosa si complica...
    Codice PHP:
    //client
    [...]
    send(sdnomestrlen(nome), 0);
    send(sdmsgstrlen(nome), 0);
    [...]
    //server
    [...]
    recv(temp_sdnomesizeof(nome), 0);
    recv(temp_sdmsgsizeof(nome), 0);
    [...] 
    il client manda tutto tranquillamnete ma il server non visualizza quello che riceve, come se aspettasse ancora qualche cosa..


    è possibile con qualche modifica fare quello che voglio? ovvero avere praticamente 2 canali in un unico soket oppure devo per forza inserire le variabili nome e msg in una variabile Buffer che mando al server e che sarà poi il server a spezzettare ed elaborare?

    mi sono avvicinato ai socket da circa 2 ore :P non mi interessa sapere tanto quale dei 2 metodi è il piu' giusto, ora mi interessa capire cosa posso e cosa non posso fare con i socket.

    thx ciao
    my workgroup :sexpulp:
    http://www.promisestudios.net

  2. #2
    Credo il problema sia che le due stringhe inviate vengono "recepite" dal primo recv. Potresti usare l'approccio "storico" request-reply. Ossia il client invia la stringa e aspetta un messaggio di avvenuta ricezione. Il server, quando riceve la stringa, invia questo messaggio. A questo punto il client manda la seconda stringa.
    ciao ciao !!
    _______________
    home : cristianolongo.altervista.org
    e-mail : cristiano_longo@yahoo.it

  3. #3
    codice:
    //codice CLIENT
    
    void MsgProc()
    {
        char str1[]="Marco", str2[]="Rossi", str3[]="12345";
    
        send(sock, str1, strlen(str1), 0);
        Sleep(100);
        send(sock, str2, strlen(str2), 0);
        Sleep(100);
        send(sock, str3, strlen(str3), 0);
        Sleep(100);
    
        closesocket(sock);
    }
    
    
    //codice SERVER
    
    void MsgProc()
    {
        char buf1[20]="\0", buf2[20]="\0", buf3[20]="\0";
    
        recv(sock, buf1, 20, 0);
        recv(sock, buf2, 20, 0);
        recv(sock, buf3, 20, 0);
        
        printf("%s\n%s\n%s\n", buf1, buf2, buf3);
            
        closesocket(sock);
    }
    P.S. L'esempio completo lo trovi qua:
    http://forum.html.it/forum/showthrea...ghlight=socket
    (Ovviamente le due procedure client e server "MsgProc()"
    vanno sostituite con queste.)
    ...Terrible warlords, good warlords, and an english song

  4. #4
    thx

    sai mica magari rispondere pure all'altro mio thread sulla possibilità di mandare in broadcast o solo a certi client connessi al server un determinato msg?
    my workgroup :sexpulp:
    http://www.promisestudios.net

  5. #5
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104
    per il broadcast non ho mai provato, per mandarlo solo a certi client in stile broadcast dovresti usre gli indirizzi di multicast dell'IPv4

  6. #6
    mi spieghi un po come funzia sto multicast?
    my workgroup :sexpulp:
    http://www.promisestudios.net

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    147
    per potere ricevere stream in multicast è necessario che i tuoi client si mettano in ascolto su di un indirizzo multicast: ipv4 mette a disposizione gli indirizzi di

    Classe D : va da 224.0.0.0 a 239.255.255.255

    se però lavori su di una rete localaùe (o una subnet) puoi utilizzare l'indirizzo di broadcast 255.255.255.255
    Se invece vuoi inviare un broadcast su di una rete non locale:
    idrete.tutti 1
    es.
    192.168.0.255
    N.B
    255.255.255.255 viene bloccato dai router..

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2001
    Messaggi
    147
    Un'ultima cosa
    Il tuo problema con le socket deriva dal fatto che non invii il terminatore di stringa \O
    quando invii send(socket_descriptor,msg,msg_length) usa
    strlen(stringa)+1


    riciao

  9. #9
    ti ringrazio per ambedue le risposte, effettivamente mi stavo domandando a cosa serviva quel +1 allo strlen che ho trovato in aclcuni script^^

    so di chiederti tanto... ma mi potresti spiegare a lv di codice come implemetare il multi cast?

    Es.
    al server ho 3 client collegati, come faccio a mandare il msg "ciao" solamente al client 1 e 2?

    come faccio a capire quali client sono connessi al server?
    my workgroup :sexpulp:
    http://www.promisestudios.net

  10. #10
    Utente di HTML.it L'avatar di Yojimbo
    Registrato dal
    Nov 2003
    Messaggi
    104
    con il multicast, tutti i messaggi inviati a un certo ip di Classe D vengono ricevuti da tutti i socket in ascolto su quell'indirizzo, se non vuoi che loricevano tutti o usi diversi inidirizzi multicast o dovrai inviare i messaggi a ogni singolo filedescriptor che ti serve

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 © 2024 vBulletin Solutions, Inc. All rights reserved.