Accueil > Forum > > > > Client IRC [Sockets/Threads]
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
|
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 1459Je 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
|
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
|
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]
|
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
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|