Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1540 connectés 

  FORUM HardWare.fr
  Programmation

  [ C# ASP.net] Sockets

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ C# ASP.net] Sockets

n°96584
shinji
Posté le 04-02-2002 à 15:01:41  profilanswer
 

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 ?

mood
Publicité
Posté le 04-02-2002 à 15:01:41  profilanswer
 

n°96651
siewn
Posté le 04-02-2002 à 17:48:14  profilanswer
 

si ça peut t'aider : http://www.aylo.com/AyloChat/  (chat fait en .net)

n°96822
shinji
Posté le 05-02-2002 à 09:04:49  profilanswer
 

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!

n°96848
shinji
Posté le 05-02-2002 à 10:27:21  profilanswer
 

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 :


using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
 
class Server  
{
   public static void Main()  
   {
      DateTime now;    
      String strDateLine;      
      Encoding ASCII = Encoding.ASCII;
     
      // listen on port 13    
      TcpListener tcpl = new TcpListener(13);    
 
      tcpl.Start();
       
      Console.WriteLine("Waiting for clients to connect" );
         Console.WriteLine("Press Ctrl+c to Quit..." );
 
      while (true)
      {
         // Accept will block until someone connects
                  Socket s = tcpl.AcceptSocket();
         
         // Get the current date and time then concatenate it
                  // into a string
                  now = DateTime.Now;
                  strDateLine = now.ToShortDateString() + " " +  
                  now.ToLongTimeString();
             
                  // Convert the string to a Byte Array & send it
                  Byte[] byteDateLine =  
ASCII.GetBytes(strDateLine.ToCharArray());
         s.Send(byteDateLine, byteDateLine.Length, 0);
         Console.WriteLine("Sent " + strDateLine);
      }
   }
}


 
Pour le client

Citation :


using System;
using System.Net.Sockets;
 
public class Client
{
   static public void Main( string[] Args )
   {
   TcpClient socketForServer;
      try
      {
         socketForServer = new TcpClient("localHost", 13);
      }
      catch
      {
         Console.WriteLine(
            "Failed to connect to server at {0}:999", "localhost" );
         return;
      }
 
      NetworkStream networkStream = socketForServer.GetStream();
 
      System.IO.StreamReader streamReader =
         new System.IO.StreamReader(networkStream);
         
      System.IO.StreamWriter streamWriter =
         new System.IO.StreamWriter(networkStream);
       
      try
      {
         string outputString;
 
         // read the data from the host and display it
     
         {
         
            outputString = streamReader.ReadLine();
 
               Console.WriteLine(outputString);
               streamWriter.WriteLine("Client Message" );
               Console.WriteLine("Client Message" );
               streamWriter.Flush();
               
         }
       
      }
      catch
      {
         Console.WriteLine("Exception reading from Server" );
      }
 
      // tidy up
      networkStream.Close();
   }
}  


 
Votre aide sera la bienvenue ;)

n°96904
Roswell_
Posté le 05-02-2002 à 12:29:29  profilanswer
 

Bah, je fais aussi des sockets en ce moment, je regarderais ça ce soir.

n°96957
shinji
Posté le 05-02-2002 à 14:20:20  profilanswer
 

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?

n°96997
shinji
Posté le 05-02-2002 à 16:34:06  profilanswer
 

ce sont les deux lignes là qui déconnent:
 

Citation :

outputString = streamReader.ReadLine();
Console.WriteLine(outputString);


 
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 ?

n°97004
siewn
Posté le 05-02-2002 à 17:03:25  profilanswer
 

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

n°97011
shinji
Posté le 05-02-2002 à 17:16:32  profilanswer
 

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?

n°97081
Roswell_
Posté le 05-02-2002 à 21:07:11  profilanswer
 

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);

mood
Publicité
Posté le 05-02-2002 à 21:07:11  profilanswer
 

n°97111
shinji
Posté le 05-02-2002 à 22:31:03  profilanswer
 

MERCI, j'essaye ça dès demain matin au boulot

n°97114
shinji
Posté le 05-02-2002 à 22:41:19  profilanswer
 

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 ?

n°97154
shinji
Posté le 06-02-2002 à 09:00:07  profilanswer
 

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 ?

n°97175
Roswell_
Posté le 06-02-2002 à 10:15:24  profilanswer
 

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+


---------------
http://www.cheata.net le site qui vous donne la banane!
n°97190
shinji
Posté le 06-02-2002 à 10:47:24  profilanswer
 

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 :(

n°97192
shinji
Posté le 06-02-2002 à 10:50:49  profilanswer
 

si je comprend bien asynchrone c'est pour éviter de bloquer le serveur, non?
Ok mais bon.....,je continue mes recherches......

n°97291
Roswell_
Posté le 06-02-2002 à 12:55:19  profilanswer
 

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.


---------------
http://www.cheata.net le site qui vous donne la banane!
n°97352
shinji
Posté le 06-02-2002 à 14:40:04  profilanswer
 

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 ?

n°97365
shinji
Posté le 06-02-2002 à 14:46:36  profilanswer
 

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?

n°97434
shinji
Posté le 06-02-2002 à 16:31:36  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [ C# ASP.net] Sockets

 

Sujets relatifs
[ASP] ???[ASP] PB migration de Access 2000 vers SQLServer 2000
[ASP] Récupérer la résolution sans recours aux QueryStrings[ASP] Comment accéder à un objet d'une frame en VBscript ?
ASP : contenu d'un recordset dans un tableau[C++] Questions sur les sockets (code inside)
[ASP] Pb avec l'objet FileSystemObject et les noms UNC[ASP] HAAARG ! fonction à la con
[ASP] pb sur requete SQL[Asp/Php] Avantage du php par rapport a l asp
Plus de sujets relatifs à : [ C# ASP.net] Sockets


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)