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

urukuru Messages postés 3 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 14 mai 2004 - 14 mai 2004 à 16:57
rossjulian Messages postés 13 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 22 août 2007 - 1 févr. 2005 à 12:28
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

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
14 mai 2004 à 18:03
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 !!!!
0
rossjulian Messages postés 13 Date d'inscription jeudi 30 décembre 2004 Statut Membre Dernière intervention 22 août 2007
1 févr. 2005 à 12:28
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!" );


}


}
0
Rejoignez-nous