begin process at 2010 02 10 12:21:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Réseau & Internet

 > 

Sockets

 > 

Client IRC [Sockets/Threads]


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Client IRC [Sockets/Threads]

dimanche 6 mai 2007 à 11:10:26 | Client IRC [Sockets/Threads]

SpecialCharacter

Bonjour, je me suis mis à la programmation d'un petit client IRC
Il ressemble en beaucoup de points à tous ceux des débutants je n'en doute pas.
Il est assez délicat de gérer ces connexions avec les \r\n, en tout cas pour ma part il semble que le problème se situe ici, en effet, je ne reçois pas tous les messages que je devrais (Je fais le parallèle avec XChat en journal brute pour voir ce qui diffère...)

Voici mon code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
 
namespace Client_IRC
{
public partial class Dialogue : Form
{
// Création du socket de connexion au server.
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Délégué pour la gestion de la ChatBox par le ThreadAffichage.
privatedelegatevoid TextBoxDelegateHandler(string str);
private TextBoxDelegateHandler TextBoxDelegate;
byte[] reception = newbyte[1024];
 
public Dialogue()
{
InitializeComponent();
TextBoxDelegate = new TextBoxDelegateHandler(UpdateData);
Thread t_reception = new Thread(new ThreadStart(ThreadReception));
Thread t_affichage = new Thread(new ThreadStart(ThreadAffichage));
 
socket.Connect(new IPEndPoint(Dns.GetHostAddresses("irc.epiknet.net")[0], 6667));

t_reception.Start();
t_affichage.Start();
 
 
byte[] envoi = Encoding.Default.GetBytes("NICK Tastee\r\nUSER guest tolmoon tolsun :Ronnie Reagan\r\n");
 
try
{
int i = socket.Send(envoi, 0, envoi.Length, SocketFlags.None);
ChatBox.Text = "Envoyé: " + i + " octets.\r\n";
}
catch(SocketException Ex)
{
MessageBox.Show("Erreur: " + Ex.Message);
}
}
privatevoid UpdateData(string str)
{
ChatBox.Text += str;
}
 
privatevoid ThreadReception()
{
while(true)
{
try
{
socket.Receive(reception, 0, reception.Length, SocketFlags.None);
}
catch(SocketException Ex)
{
MessageBox.Show("Connexion interrompue: " + Ex.Message);
Thread.CurrentThread.Abort();
}
Thread.Sleep(100);
}
}
privatevoid ThreadAffichage()
{
try
{
Invoke(TextBoxDelegate, Encoding.ASCII.GetString(reception));
}
catch
{
Thread.CurrentThread.Abort();
}
Thread.Sleep(100);
}
 
privatevoid textBox1_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
byte[] envoi = Encoding.Default.GetBytes(textBox1.Text + "\r\n");
socket.Send(envoi, 0, envoi.Length, SocketFlags.None);
textBox1.Text = "";
}
}
}
}

Je n'obtiens que ce message:


Je n'obtiens que ceci...

Envoyé: 55 octets.
:toulouse2.fr.epiknet.org NOTICE AUTH :*** Looking up your hostname...
:toulouse2.fr.epiknet.org NOTICE AUTH :*** Checking ident...

Peut-être que je fais erreur du côté de l'encodage...mais je ne sais trop comment la résoudre

Merci de votre aide,
Cordialement
dimanche 6 mai 2007 à 11:39:59 | Re : Client IRC [Sockets/Threads]

coq

Administrateur CodeS-SourceS
Salut,

Je n'ai jamais approfondi le sujet mais avec IRC tu n'es pas censé attendre la réponse d'une commande avant d'envoyer la suivante ?


/*
coq
MVP Visual C#
CoqBlog
*/
dimanche 6 mai 2007 à 11:45:59 | Re : Client IRC [Sockets/Threads]

SpecialCharacter

Bonjour Coq,


Ce n'est pas le cas avec IRC, par exemple on pourra envoyer NICK et USER à la suite, cf RFC 1459
Je ne sais trop quoi faire, ce protocole m'a l'air capricieux..mais je ne sais pas quoi utiliser entre TcpClient et les connection classique, je suis un peu perdu et ne comprend pas la différence entre les deux et leur utilité respective ,

Cordialement
dimanche 6 mai 2007 à 12:04:44 | Re : Client IRC [Sockets/Threads]

SpecialCharacter

Je viens de sniffer le flux avec WireShark, je reçois bien des données du server IRC, je crois que c'est plus un soucis d'encoding...je ne sais pas lequel utiliser j'ai testé avec Encoding.Defaut|ASCII|UTF8.GetString(recepetion); // recepetion > byte[256]

En attente d'une réponse...
dimanche 6 mai 2007 à 12:31:23 | Re : Client IRC [Sockets/Threads]

coq

Administrateur CodeS-SourceS
Réponse acceptée !
TcpClient facilite un peu les choses en masquant le travail sur les Socket.
A toi de voir si son utilisation correspond à ton besoin et ne deviendra pas bloquante à terme.

Je ne vois pas pourquoi tu utilises un thread dédié à l'affichage, mais ce qui est sur c'est qu'il ne s'execute qu'une seule fois :-)


/*
coq
MVP Visual C#
CoqBlog
*/
dimanche 6 mai 2007 à 12:36:53 | Re : Client IRC [Sockets/Threads]

coq

Administrateur CodeS-SourceS
Sinon je ne sais pas si tu as choisis de tout implémenter toi même délibérement, mais il existe déjà des librairies IRC pour .NET, comme SmartIrc4net : [ Lien ]



/*
coq
MVP Visual C#
CoqBlog
*/
dimanche 6 mai 2007 à 12:49:08 | Re : Client IRC [Sockets/Threads]

SpecialCharacter

Merci pour tout Coq :) Je me penche de plus près sur ce soucis de Threading
dimanche 6 mai 2007 à 12:58:37 | Re : Client IRC [Sockets/Threads]

SpecialCharacter

Est-ce que tu pourrais m'expliquer pourquoi il ne s'execute qu'une fois ? Comment je devrais faire, c'est un peu me mâcher le travail mais j'aimerais comprendre et les tutos de développez.com ne sont pas très clairs quant à l'utilité de Suspend, Resume etc.
dimanche 6 mai 2007 à 13:07:44 | Re : Client IRC [Sockets/Threads]

coq

Administrateur CodeS-SourceS

Ba la méthode s'execute une seule fois, ta réception est toujours active car tu as mis une boucle infinie, chose que tu n'as pa faite dans l'ordre thread. Un thread ne "boucle" pas automatiquement sur la méthode.

Concernant le threading, tu peux consulter cet eBook de Joseph Albahari, Threading in C# : [ Lien ]



/*
coq
MVP Visual C#
CoqBlog
*/



Cette discussion est classée dans : system, socket, thread, using, reception


Répondre à ce message

Sujets en rapport avec ce message

Multi threading using TCP and socket [ par gdupasqu ] Bonjour,je suis entrain d'écrire un programme (client et serveur).Le serveur fonctionne comme ceci: 1. Le serveur écoute sur un port fixé. 2. Lorsqu'u Multi Threading en utilisant TCP [ par gdupasqu ] Bonjour,je suis entrain d'écrire un programme (client et serveur).Le serveur fonctionne comme ceci:1. Le serveur écoute sur un port fixé.2. Lorsqu'un Comparaison entre C# et C!!!! [ par moihenry ] Voila j'ai un problème : j'envoi une commande a un serveur cod: "ÿÿÿÿgetstatus" //pour avoir les info des serveurje recois cette réponse : ÿÿÿÿdisconn problème avec thread jouant un son! [ par othland ] slt tlm;je voulais concevoir un programme qui lance un thread qui lui même surveille l'horloge système pour lancer un son, le problème c'est que quand pb: ou placer un thread???? [ par othland ] slt tlm;c'est la première fois que je travaille avec des thread sous visual C#.j'ai un programme qui gère plusieurs fenêtres...etc.je veux qu'en paral controle listbox dans un thread [ par diego29 ] bonjour ,je souhaite afficher des nombres premiers dans une listbox à travers un threadvoici mon code sans erreur de compilation mais qui n'affiche ri Threads en csharp [ par moi411 ] Bonsoir à tous,Pour être bref le thread que j'utilise marche mais seulement avec l'utilisation d'une MessageBox dans le programme principal...Mon prog Cross-Thread Erreur [ par piradom ] Bonjour, voila j'suis un debutant en programmation, je suis tomber sur cette source, mais lorsque je lance l'application, Visual Studio m'indique qu'i Fermer une fenêtre principale [ par DIMUSERS ] Bonjour à tous,Voilà mon pb. Dans mon programme j'ai un évennement toutes le 40 ms. Durant cet évennement je dois faire une action à intevale régulier Operation inter-thread [ par DedeSurf ] Bonjour, Je n'arrive pas à déclencher un event ou à exécuter une méthode via un thread pour mon thread principal. using System; using System.Collect


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,853 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales