C#: Chat Client/Serveur => Send vers 1 seul client

Signaler
Messages postés
3
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
14 mai 2004
-
Messages postés
13
Date d'inscription
jeudi 30 décembre 2004
Statut
Membre
Dernière intervention
22 août 2007
-
Bonjour, voila le probleme, je suis en trein de faire un client serveur en c# le probleme est que j'arrive bien a envoier les messages d'un client vers tous les autres clients, mais pas vers un seul bien specifique qui est selectionner dans un listbox.

Voici le code de l'envoie vers tous, si qq'un pouvait m'aider ce serait cool.

Merci.

Code serveur:

public void ReceptData( IAsyncResult ResultAsync )
{
CSockCli oSockCli = (CSockCli)ResultAsync.AsyncState;
byte [] TabRetourne = oSockCli.GetRecievedData( ResultAsync );

if( TabRetourne.Length < 1 )
{
Console.WriteLine( "Client {0}, déconnecté", oSockCli.Sock.RemoteEndPoint );
oSockCli.Sock.Close();
TabCli.Remove( oSockCli );
return;
}

foreach( CSockCli clientSend in TabCli )
{
try
{
clientSend.Sock.Send( TabRetourne );
}
catch
{
// If the send fails the close the connection
Console.WriteLine( "Send to client {0} failed", oSockCli.Sock.RemoteEndPoint );

clientSend.Sock.Close();
TabCli.Remove( oSockCli );
return;
}
}
oSockCli.SetupRecieveCallback( this );
}
}

2 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
1) merci d'utiliser la balise code (cf barre d'outils en bas) c'est mieux pour nous lire

2) a la base le serveur relaie les messages a tous les autres clients
ta selection de destinataire se fait coté client
=> comment le serveur peut etre au courant qu'il ne doit pas envoyer le message a tlm ?
tu devrais te faire un petit protocole, genre "*|<message>" pour que le serveur sache qu'il doit envoyer a tout le monde et "<nom destinataire>|<message>" pour l'envoi a un client specifique

Cocoricoooooooo !!!!
Messages postés
13
Date d'inscription
jeudi 30 décembre 2004
Statut
Membre
Dernière intervention
22 août 2007

salut
REPONSE :
tu pe mettre si tu ve tous tes clients dans une liste et apres tu redirige sur celui que tu ve

QUESTION :
Mais ce n'est pas seulement pour cette réponse que je vous écrire mais pour un probleme

Je ve envoyé un message de mon client (un PDA donc un projet Smart Device) a un serveur classique.
Je n'arrive pa a utilisé le INVOKE avec 2 paramètres il n'en ve qu'un seul. Le probleme est qu'il me jette qd je lui en met qu'un seul

merci de votre aide
voila mon code


public
delegate
void AddMessage(
string sNewMessage );



public
void OnRecievedData( IAsyncResult ar )


{





// Socket was the passed in object


Socket sock = (Socket)ar.AsyncState;



// Check if we got any data



try


{



int nBytesRec = sock.EndReceive( ar );



if( nBytesRec > 0 )


{



// Wrote the data to the List





string sRecieved = Encoding.ASCII.GetString( m_byBuff, 0, nBytesRec );





// WARNING : The following line is NOT thread safe. Invoke is



// listBox1.Items.Add( sRecieved );


Invoke( m_AddMessage,
new
string [] { sRecieved});






// If the connection is still usable restablish the callback


SetupRecieveCallback( sock );


}



else


{



// If no data was recieved then the connection is probably dead


Console.WriteLine( "Client {0}, disconnected", sock.RemoteEndPoint );


sock.Shutdown( SocketShutdown.Both );


sock.Close();


}


}



catch( Exception ex )


{


MessageBox.Show(
this + ex.Message + " Unusual error during Recieve!" );


}


}