SpecialCharacter
Messages postés12Date d'inscriptionlundi 2 avril 2007StatutMembreDernière intervention23 mai 2007
-
6 mai 2007 à 11:10
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
6 mai 2007 à 13:07
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));
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 6 mai 2007 à 12:31
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 :-)
SpecialCharacter
Messages postés12Date d'inscriptionlundi 2 avril 2007StatutMembreDernière intervention23 mai 2007 6 mai 2007 à 11:45
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 ,
SpecialCharacter
Messages postés12Date d'inscriptionlundi 2 avril 2007StatutMembreDernière intervention23 mai 2007 6 mai 2007 à 12:04
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 6 mai 2007 à 12:36
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 : http://smartirc4net.meebey.net/
SpecialCharacter
Messages postés12Date d'inscriptionlundi 2 avril 2007StatutMembreDernière intervention23 mai 2007 6 mai 2007 à 12:58
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.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 6 mai 2007 à 13:07
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.