Bonjour,
je suis en train d'apprendre le fonctionnement des sockets... J'ai créé un serveur qui accepte les multiconnexions simultanément (et bientot avec un timeout j'espere). Pour le moment : je fais : telnet 127.0.0.1 25, et ce que j'écris est affiché sur la fenetre du serveur.. cela fonctionne, par contre, dans la fenetre dos où j'ai écris mon telnet, ca n'affiche que des espaces pour les caractères que j'écris, je ne trouve pas l'erreur. Pouvez vous m'aider ? Merci
Voici mon code (c'est un brouillon, je sais que c pa tres rigoureux) :
#include <iostream>
#include <stdlib.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
void main()
{
int longueur;
WSADATA WSAData;
WSAStartup(MAKEWORD(2,2), &WSAData);
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
fd_set Ref ;//pr le multithread
fd_set temp ;
FD_ZERO ( &Ref ) ;// initialisation des tableau de fd_set
FD_ZERO ( &temp ) ;
char buf[25];
buf[0]=0;
sock = socket(AF_INET, SOCK_STREAM, 0);//Sock stream : mode TCP ... Af_INET : réseau IP
sin.sin_addr.s_addr= INADDR_ANY;//Le client peut avoir n'importe quel IP
sin.sin_family= AF_INET;// de type réseau IP
sin.sin_port= htons(25);//Le client doit se connecter sur le port 25
bind(sock, (SOCKADDR *)&sin, sizeof(sin));// on affecte les parametres
listen(sock, 0);//On écoute la connection
int sinsize = sizeof(csin);
FD_SET ( sock , &Ref ) ;
temp=Ref;
while(1)
{
select ( 0 , &temp , NULL , NULL , NULL ) ;// Multiplexage des Entrées
if ( FD_ISSET ( sock , &temp ) )// On teste s'il s'agit d'une demande de connexion
{//Demande de connexion
csock = accept ( sock , (struct sockaddr *)&csin , &sinsize ) ;
FD_SET ( csock , &Ref ) ;
cout<<"Nouvelle Connexion acceptee\n";
}
else
{// il s'agit d'un demande de communication
longueur = recv ( temp.fd_array[0] , buf , sizeof(buf) , 0 ) ;// Reception du message
buf[longueur]=0;//Pour dire que c la fin de la chaine
if ( longueur == 0 )
{
// Le client n'as rien envoyé, c'est donc qu'il s'est déconnecté
// On le supprime donc de la liste et on ferme son socket de communication
FD_CLR ( temp.fd_array[0] , &Ref ) ;
closesocket ( temp.fd_array[0] ) ;
cout<<"Fermeture d'une connexion\n";
}
else
{
// send (temp.fd_array[0] , buf, longueur , 0 ) ;
cout<<buf;
}
}
temp = Ref ;
// On rétabli l'ensemble de temp
}
}