Flux rss
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

Socket , c et irc

OJ, le dimanche 9 octobre 2005 à 16:57:14 
 Signaler ce message aux modérateurs

Salut a tous.

Je voulais faire un petit bot d'administration pour un chan sur irc, car tous ce que je trouve ne compile pas bien sur obsd. Et puis ca me fera peut etre comprendre le principe du socket.

Donc j'ai reussi en regardant par ci par la a ouvrir un socket, vers le serveur irc.

Mais je crois que ma methode n'est pas bonne lors de la communication avec le serveur.

En gros j'ai essayé avec un telnet et j'ai reussi a avoir une connexion, et meme a me mettre sur un chan.

$telnet x.x.x.x 6667
(2 ligne de blabla du serveur)
USER OJ . . :monnom
NICK LULU
(le serveur renvoi :
PING :xxxxxxx
ou xxxxx est un chiffre a lui retourner)
PONG xxxxxxx
(a ce stade, je suis enregistrer et je peu faire:)
JOIN #test
PRIVMSG #test :Salut tt le monde


Bref, ca c'est en telnet. Mais en C je ne comprend pas comment enchainer lecture et ecriture sur le socket.

int initsrv(int sock){

  char buffer[LG_BUFFER];
  int nb_lus;
  char *user="LuLu . . :OJ\r\n";
  char *nick="LuLuLeBot\r\n";  
  
  
  videsocket(sock);
  
  //videsocket(sock);
  if(write(sock,user,strlen(user))<0){
    perror("Erreur Enregistrement Usr\n");
    return(-1);
  }
  if(write(sock,nick,strlen(nick))<0){
    perror("Erreur Enregistrement Nick\n");
    return(-1);
  }
  if((nb_lus=read(sock,buffer,LG_BUFFER))<0){
    perror("Erreur Ping serveur\n");
    return(-1);
    }
  //printf("Reponse ping%s\n",buffer);
  write(STDOUT,buffer,LG_BUFFER);
  printf("\n");
  return(0);
}


La fonction videsocket(int socket) lit sur le socket 1024 caractère.

Donc ca m'affiche les 2 lignes de blabla et puis plus rien, le programme bloque sur le dernier read de initserveur().

Voila, voila. Jespere avoir été complet.
Si quelqu'un a une idee, ou un bon tutorial...

Merci davance a ceux qui prendront le tps de lire ca.
A bientot

1

crabs, le dimanche 9 octobre 2005 à 18:54:22
  • +1

Bonjour,
Commence par lire la RFC de l'IRC
http://abcdrfc.free.fr/rfc-vf/rfc1459.html
elle explique en détail les échanges à mener.
A+, crabs ..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

2

OJ, le dimanche 9 octobre 2005 à 18:58:09

Salut.


Néanmoins je ne pense pas que le problème vient de la. Car j'ai deja lu la rfc irc. C'est dailleur grace a celle-ci que j'ai reussi a me connecter au serveur avec telnet.
Si tu penses a un chapitre en particulier de la rfc que j'aurai mal compris, indique le moi stp.

Merci de ta reponse.

Répondre à OJ

3

crabs, le lundi 10 octobre 2005 à 15:10:37
  • +1

Salut,
Il me semble qu'il faut faire des IO asynchrones d'une taille max de 512o et
qu'il fallait commencer par PASS, puis NICK et enfin USER (4.1 de la RFC)
Or ta connexion commence par USER puis NICK, je pas vu de PASS.

Autre truc, ton exemple telnet ne reprend pas les même identifiants que ton
source.

Sinon il semblerait qu'il y ait de nouvelles RFC pour IRC : 2810 à 2813 (pas
regardé en détail).

[j'avais participé à codage de client IRC y a 5 ans pour Solaris, je remets pas la
main sur les source :-( ]

J'ai pas vu sur le NET de différences entre les socket INET OpenBSD et
celles mis en oeuvre par les autres UNIX, donc je pense que c'est plutôt le
serveur qui attend quelque chose avant de répondre.

A+, crabs ..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

4

OJ, le mardi 11 octobre 2005 à 00:26:30

Salut.

Je crois que la commande pass est necessaire juste pour les serveurs necessitant un mot de passe.

Mais j'ai trouvé une solution, et je crois que c'était une bete erreur de ma part.
J'ai fais une fonction qui lit caractère par caractère sur le socket, et qui attend le \r\n de la fin de ligne irc.

Avec un select, j'attend un nombre variable de ligne (dépendant du serveur). Et donc c'est bien parti.

Merci pour ton aide et les infos
A bientot

Répondre à OJ

5

 LocknessSuisse, le vendredi 29 mai 2009 à 11:59:53

Et le tutoriel sur les winsock2, ça peux être utile : http://h2fr.free.fr/index.php?show_topic=263

Répondre à LocknessSuisse
[Socket C] Transfert de fichier Client/Server Bonjour, J'ai mis en place un client et un serveur http en C via les Socket. Tout marche bien, lorsque le client se connecte sur le serveur il arrive bien à lire le contenu du html placé sur le serveur via la méthode GET. Je voudrais que le client... www.commentcamarche.net/forum/affich-11132739-socket-c-transfert-de-fichier-client-server
Communication, socket C++ Voila: j'ai deux ordi differents sur lesquels tourne un logiciel. Sur mon ordi A, le logiciel envoi des données par socket sur mon ordi B où un autre logiciel (pas le meme) recupere ces infos. Moi, je veux creer un logiciel (en c(++) de preference...)... www.commentcamarche.net/forum/affich-881605-communication-socket-c
Socket C Slt la compagnie !!! J'ai un super pb en c, au niveau des sockets. En fait sur le serveur, le programme ne continue pa apres le listen (pas d'entréé ds la boucle pour accepter les connections) mon code : void main() { WSADATA WSAData;... www.commentcamarche.net/forum/affich-394181-socket-c
La compilation et les modules en C et en C++Cet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du... www.commentcamarche.net/faq/sujet-14440-la-compilation-et-les-modules-en-c-et-en-c
Les piles en langage CLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage... www.commentcamarche.net/faq/sujet-8283-les-piles-en-langage-c
Compiler du C sous Linux/UNIXSous Linux, le compilateur de C est gcc. Il est installé de base sur plusieurs distributions, mais sur Debian (et celles qui en découlent) il faudra l'installer (aptitude install gcc). gcc Syntaxe de GCC gcc Tout d'abord, il faut savoir... www.commentcamarche.net/faq/sujet-203-compiler-du-c-sous-linux-unix
Problem d'envoi de fichier par socket en cBonjour, je veut envoyer un fichier(image, texte, executable) via les socket en c, j'ai créer mon programme et il marche que pour les fichier texte. Pour les image, musique .., tous se qui est en binaire sa marche pas. voila mon code qui gere lenvoi... www.commentcamarche.net/forum/affich-9811398-problem-d-envoi-de-fichier-par-socket-en-c
[C] [Socket] Temps limite d'un connect() (Résolu)Bonsoir, Alors voilà mon soucis, J'ai un socket qui se connecte en tcp sur une machine distante mais au moment où la fonction connect() s'execute, le programme est en attente et la suite ne s'execute pas avant quelques minutes. Mais tout ce que... www.commentcamarche.net/forum/affich-1864990-c-socket-temps-limite-d-un-connect
Utilisation de socket.h C++ sous Unix/LinuxQuelqu'un pourrait-il me donner un exemple simple, commenté si possible, d'un programme utilisant socket.h (du genre envoyer ou recevoir du texte d'un autre pc en type client/serveur) ? Merci d'avance www.commentcamarche.net/forum/affich-104658-utilisation-de-socket-h-c-sous-unix-linux
Télécharger Visual C++ 2008 ExpressVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C. www.commentcamarche.net/telecharger/telecharger-34056350-visual-c-2008-express
Télécharger Dev-C++Dev-C++ est un environnement de développement intégré (IDE) en C/C++. Son compilateur est basé sur Mingw de GCC, mais il peut également être utilisé avec CygWin. www.commentcamarche.net/telecharger/telecharger-59-dev-c
Télécharger Labo de formation C#.NetLabo de formation C#.Net représente environ 200h de formation, sous forme d'ateliers comprenant des cours au format pdf, des TD, des TP (plus de 200 exemples, exercices, mini projets sont inclus avec leurs corrections, inclus aussi un QCM de... www.commentcamarche.net/telecharger/telecharger-34058224-labo-de-formation-c-net
Dream multimedia Dreambox DM 600 PVR DVB-CPort Common Interface: , Modulateur RF: , Nombre de prises Péritel (SCART) :1 st, Compatible Dolby Digital, Télétexte, Electronic Program Guide (EPG), Minuteur: , Type de récepteur:DVB-C, Twin Tuners:No, Nombre de cartes acceptées:1, Lecteu www.commentcamarche.net/guide/917028-dream-multimedia-dreambox-dm-600-pvr-dvb-c
Intel Pentium 4 631 3.0 GHz Socket 775 800 MHz busPentium 4, 3 MHz, Socket 775, Bus:800.0 MHz, Cache L1: , Cache L2:2048.0 Ko, Divers: , Fréquence:3000 Mhz, Marque du processeur:Pentium 4, Socket:Socket 775, Type:Processor, Page web du produit:Anglais www.commentcamarche.net/guide/551856-intel-pentium-4-631-3-0-ghz-socket-775-800-mhz-bus
Intel Core2 Quad Q9550 2.83 GHz Socket 775 1333 MHz bus in a BoxCore 2, Intel Core 2 Quad, 2.83 MHz, Socket 775, Ventilateur CPU inclus, Refroidissement compris, Socket:Socket 775, Marque du processeur:Intel Core 2 Quad, Nbre de coeurs:Dual Coeur, Divers: , Fréquence:2830 Mhz, Cache L2:12288.0 Ko, Cache L1:128.0. www.commentcamarche.net/guide/1064475-intel-core2-quad-q9550-2-83-ghz-socket-775-1333-mhz-bus-in-a-box
Les fonctions de l'API SocketLes fonctions des sockets en détail La fonction socket() La création d'un socket se fait grâce à la fonction socket() : int socket(famille,type,protocole) famille représente la famille de protocole utilisé (AF_INET pour TCP/IP utilisant une... www.commentcamarche.net/contents/sockets/sockfonc.php3
Langage C++ - Les types de donnéesLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître... www.commentcamarche.net/contents/cpp/cpptype.php3
Langage C - Les types de donnéesLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le... www.commentcamarche.net/contents/c/ctype.php3