+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Scambio messaggi server , n client con riconoscimentodi quest'ultimi!!

  1. #1
    Stellasl non Ŕ in linea Novello
    Post
    1

    Scambio messaggi server , n client con riconoscimentodi quest'ultimi!!

    Salve!!!
    Spiego meglio il problema!!!
    Ho la necessitÓ di avere un server che invii semplici messaggi a dei client che devono riceverli.
    Vorrei che il messaggio possa essere invikato a tutti,ma anche a client specifici!!
    Una specie di chat, il problema Ŕ che uso questo

    Codice PHP:
    try
                {
                    
    // Check the port value
                    
    if(textBoxPort.Text == "")
                    {
                        
    MessageBox.Show("Please enter a Port Number");
                        return;
                    }
                    
    string portStr textBoxPort.Text;
                    
    int port System.Convert.ToInt32(portStr);
                    
    // Create the listening socket...
                    
    m_mainSocket = new Socket(AddressFamily.InterNetwork
                        
    SocketType.Stream
                        
    ProtocolType.Tcp);
                    
    IPEndPoint ipLocal = new IPEndPoint (IPAddress.Anyport);
                    
    // Bind to local IP Address...
                    
    m_mainSocket.BindipLocal );
                    
    // Start listening...
                    
    m_mainSocket.Listen(4);
                    
    // Create the call back for any client connections...
                    
    m_mainSocket.BeginAccept(new AsyncCallback (OnClientConnect), null);
                    
                    
    UpdateControls(true);
                    
                }
                catch(
    SocketException se)
                {
                    
    MessageBox.Show se.Message );
                }
    void ButtonSendMsgClick(object senderSystem.EventArgs e)
            {
                try
                {
                    
    string msg richTextBoxSendMsg.Text;
                    
    msg "Server Msg: " msg "\n";
                    
    byte[] byData System.Text.Encoding.ASCII.GetBytes(msg);
                    
    Socket workerSocket null;
                    for(
    int i 0m_workerSocketList.Counti++)
                    {
                        
    workerSocket = (Socket)m_workerSocketList[i];
                        if(
    workerSocket!= null)
                        {
                            if(
    workerSocket.Connected)
                            {
                                
    workerSocket.Send (byData);
                            }
                        }
                    }
                }
                catch(
    SocketException se)
                {
                    
    MessageBox.Show (se.Message );
                }
            } 
    Ma mi invia a tutti i client e io li vedo solo come client 1,2,3,4 e non ho un nik che me li riconosca!!
    Ovviamente il nik me lo pu˛ inviare alla conessione il client ma non so come associarlo al numero che gli da il server!!

  2. #2
    L'avatar di Ste
    Ste
    Ste non Ŕ in linea Scolaretto
    Luogo
    Genova
    Post
    236
    Ciao io proverei ad immaginare come gestire la comunicazione del nickname e quindi il suo salvataggio lato server.

    Immagino tu abbia inventato una sorta di protocollo per scambiare i messaggi fra client e server, ovvero per distinguere un messaggio di chat dal nickname o chess˛ dallo status, un messaggio privato ecc..

    Detto questo quando ti arriva il nickname di utente appena connesso (fai in modo che la prima cosa che fa un client dopo la connessione sia inviare il proprio nickname al server), dovrai salvarlo da qualche parte.

    Ho visto che salvi i client connessi in un array di qualche tipo chiamato 'm_workerSocketList', formando una collezione di instanze 'Socket', per poter salvare qualche proprietÓ del client, che non sia la sola connessione, creerei una classe personalizzata denominata per esempio 'Utente', nella quale metterai l'instanza di Socket che hai usato per accettare la connessione (nel tuo OnClientConnect) e poi altre variabili come il Nickname, l'ora di connessione per esempio, ecc..

    In questo modo lato server ti ritroverai una bella collezione di 'Utenti', dalla quale potrai realizzare un'interfaccia di amministrazione per inviare messaggi ecc, chess˛ elenchi tutti gli utenti in una listbox (visualizzando la proprietÓ Nickname) e vicino metti un qualcosa per inviare messaggi agli utenti selezionati nella listbox

    Divertiti
    "Il VeroProgrammatore non porta fuori la spazzatura: non si fida del Garbage Collector. Si limita ad esclamare: "Rifiuti.Dispose()" e l'immondizia si dissolve nel nulla."

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi