Sockets [ C# ASP.net] - Programmation
Marsh Posté le 04-02-2002 à 17:48:14
si ça peut t'aider : http://www.aylo.com/AyloChat/ (chat fait en .net)
Marsh Posté le 05-02-2002 à 09:04:49
siewn a écrit a écrit : si ça peut t'aider : http://www.aylo.com/AyloChat/ (chat fait en .net) |
C'est exactement ce que je souaite faire. Seulement il n'y a pas les sources. Ils fournissent une dll mais j'ai pas le code qu'il y a derrière.
Enfin, ça me donne un aperçu et je vais essayer de faire pareil!
Merci!
Marsh Posté le 05-02-2002 à 10:27:21
En attendant, j'ai commencé à bosser sur les sockets en c# uniquement.
J'ai trouvé un code serveur et un code client. J'ai modifié les sources un peu (elles ne marchaient pas, pb de syntaxe et autre).
Maintenant le serveur démarre, le client aussi (le serveur affiche alors que le client s'est connecté mais après.... rien)
Est-ce que c'est normal ou il y a un prob dans le code? Le voici:
Pour le serveur
Citation : |
Pour le client
Citation : |
Votre aide sera la bienvenue
Marsh Posté le 05-02-2002 à 12:29:29
Bah, je fais aussi des sockets en ce moment, je regarderais ça ce soir.
Marsh Posté le 05-02-2002 à 14:20:20
merci.
En fait le serveur affiche bien qd un client se connecte mais du côté client comment écrire un message et qu'il s'affiche chez les autres clients?
Marsh Posté le 05-02-2002 à 16:34:06
ce sont les deux lignes là qui déconnent:
Citation : outputString = streamReader.ReadLine(); |
Sans elles (je les ai mis en commentaire), le prog tourne mais du coup on récupère pas le message du serveur qui est l'heure ?
Marsh Posté le 05-02-2002 à 17:03:25
shinji a écrit a écrit : C'est exactement ce que je souaite faire. Seulement il n'y a pas les sources. Ils fournissent une dll mais j'ai pas le code qu'il y a derrière. Enfin, ça me donne un aperçu et je vais essayer de faire pareil! Merci! |
avec ça http://www.remotesoft.com/salamander/index.html tu devrais pouvoir décompiler la dll. il parait que ça marche très bien
Marsh Posté le 05-02-2002 à 17:16:32
Merci, c'est bon à savoir, ça devrait m'aider.
Mais j'aimerais bien comprendre le pkoi du comment dans le source que j'ai mis?
Marsh Posté le 05-02-2002 à 21:07:11
Bon, j'ai pas trop trouvé pourquoi ces lignes ne marchaient pas, mais tu peux les remplacer par ça pour que cela fonctionne:
int n;
byte[] b=new byte[256];
do
{
n=networkStream.Read(b,0,b.Length);
}while(n==0);
outputString= new ASCIIEncoding().GetString(b);
Marsh Posté le 05-02-2002 à 22:41:19
Sinon dans le principe d'un chat.
Sur le serveur :
un socket s attend des demandes de connexion.
A chaque demande, un nouveau socket est créé donc un par client.
Le serveur attend que le client lui envoi des messages et dès qu'il en reçoit un, il envoi le contenu du message à toutes les autres sockets ? Je comprends pas bien à quoi servent les threads ? Comment le serveur fait pour écouter les sockets et répondre en même temps ?
Le client lui ne fait que lire les messages et les envoyer au serveur via la socket. Mais comment fait-il pour en même temps afficher les messages qu'il reçoit ? Il doit écouter le socket et en plus attendre que l'utilisateur tape un message ?
Marsh Posté le 06-02-2002 à 09:00:07
Roswell_ a écrit a écrit : Bon, j'ai pas trop trouvé pourquoi ces lignes ne marchaient pas, mais tu peux les remplacer par ça pour que cela fonctionne: int n; byte[] b=new byte[256]; do { n=networkStream.Read(b,0,b.Length); }while(n==0); outputString= new ASCIIEncoding().GetString(b); |
MERCI bien ROSWELL MERCI MERCI!!!
Merci ça ça marche (Il faut pas oublier "using System.Text;" )
C'est bizarre que l'autre méthode marche pas.
Sinon vous auriez pas d'explications sur mes questions posées juste au dessus ?
Marsh Posté le 06-02-2002 à 10:15:24
Ben le serveur doit garder la liste de toutes les socket de ses clients qu'il récupere à chaque tcpl.AcceptSocket()
Normalement il faudrait créer un thread par socket avec un mini-protocole pour passer du mode j'écoute/tu écris à l'écrit/tu lis. Mais quand t'as pas mal de socket à gérer, il vaux mieux gérer les connexions en mode asynchrone, qui te mache pas mal le boulot (plus besoin de thread partout).
J'en ai pas encore fait en C# (en rien en fait).
Mais tu peux regarder un exemple de client serveur ici:
http://msdn.microsoft.com/library/ [...] xample.asp
http://msdn.microsoft.com/library/ [...] xample.asp
A+
Marsh Posté le 06-02-2002 à 10:47:24
Roswell_ a écrit a écrit : Ben le serveur doit garder la liste de toutes les socket de ses clients qu'il récupere à chaque tcpl.AcceptSocket() Normalement il faudrait créer un thread par socket avec un mini-protocole pour passer du mode j'écoute/tu écris à l'écrit/tu lis. Mais quand t'as pas mal de socket à gérer, il vaux mieux gérer les connexions en mode asynchrone, qui te mache pas mal le boulot (plus besoin de thread partout). J'en ai pas encore fait en C# (en rien en fait). Mais tu peux regarder un exemple de client serveur ici: http://msdn.microsoft.com/library/ [...] xample.asp http://msdn.microsoft.com/library/ [...] xample.asp A+ |
Merci mais aie aie aie !
Je conprends pas tout voir pas grand chose !
Est-ce qu'il y a déjà des Threads dans le bout de prog que j'ai ?
Je crois pas mais avec tout ce que j'ai lu dans mes recherches, je suis un peu confus.
Quant à ce qui est du mode asynchrone, j'arrive pas à suivre!
je trouve pas d'explications à ma hauteur sur google, il y a plein d'exemples mais bon faut les comprendre
Marsh Posté le 06-02-2002 à 10:50:49
si je comprend bien asynchrone c'est pour éviter de bloquer le serveur, non?
Ok mais bon.....,je continue mes recherches......
Marsh Posté le 06-02-2002 à 12:55:19
Bon, t'as pas encore vu les threads en C#, mais tu en as déja fait dans un autre language.
Sinon pour le moment ton premier programme n'en contenait pas, et en effet c'est pour éviter que l'attente de connexion qui est bloquante, n'empeche d'utiliser l'interface ou le reste du programme. Sans les socket asynchrones, t'aurais du faire un thread qui lance un nouveau thread pour chaque nouvelle socket.
Marsh Posté le 06-02-2002 à 14:40:04
Merci pour ton aide. Elle m'ai précieuse mais j'ai encore du mal à tout comprendre.
ok donc avec mon prog là, le serveur ne peut pas écouter les messages des clients autre que des demande de connexion. Il se contente d'attendre une connexion et de la traiter dès qu'il reçoit une demande.
Si je veux qu'il attende une connexion et en même temps qu'il écoute un autre client déjà connecté, je dois faire un thread avec le socket qui écoute pour les connections et un thread par socket des clients pour les messages c'est ça ?
"Un thread pour passer du mode j'écoute/t'écris à j'écris/t'écoute" je comprends pas bien pourquoi, ni comment ?
Sauf si je fais en asynchrone. Dans ce cas, comment ça fonctionne ? Pourquoi j'ai plus besoin de threads ?
Marsh Posté le 06-02-2002 à 14:46:36
si j'ai bie ncompris le client lui, il se connecte sur un socket et qd c'est fait, je fais une boucle qui attend un message de l'utilisateur et pendant qu'un thread écoute si le serveur a des messages à lui transmettre c'est ça?
Marsh Posté le 06-02-2002 à 16:31:36
j'ai créé un nouveau topic plus approprié car c'est des sockets et des threads en général dont je parle, pas uniquement en C# :
http://forum.hardware.fr/forum2.ph [...] topic=#bas
Marsh Posté le 04-02-2002 à 15:01:41
Je dois faire un chat en C#/ASP.net
Je ne dois rien installer sur le poste utilisateur.
Est-ce que je peux utiliser les sockets dans les interfaces faites avec ASP.net ?
Est-ce que je dois absolument faire un service web pour intégrer mon interface dans la page web ASP.net ?
Est-ce que vous voyez une autre solution ?