Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Socket et linux : serveur smtp [ Linux / Réseau & Internet ] (LuckyNut)

mardi 20 juin 2006 à 15:48:51 | Socket et linux : serveur smtp

LuckyNut

Bonjour,

J'ai développé un petit serveur smtp sous linux et j'ai un pb que je n'arrive pas à résoudre.
Il marche nickel si je le fais écouter sur le port 2525.

Par contre quand je le fais écouter sur le port 25, je remarque qu'un client windows s'y prend à 2 fois pour se connecter (avec un seul appel de connect pourtant).
Ca marche très bien avec un client linux.

Vous avez une idée du problème ?

mardi 20 juin 2006 à 17:45:07 | Re : Socket et linux : serveur smtp

katsankat

Membre Club
L'appli est lancée par root ou un autre utilisateur?

mardi 20 juin 2006 à 18:02:11 | Re : Socket et linux : serveur smtp

LuckyNut

L'appli est lancée par root.

Ce que je trouve bizarre c'est qu'avec un client sous linux tout est ok.

Je pensais au début que ca venait d'inetd qui foutait le boxon mais il n'y a aucun smtp de configuré...

mardi 20 juin 2006 à 19:09:52 | Re : Socket et linux : serveur smtp

LuckyNut

Pour que ce soit plus clair, voici l'exemple de code du serveur :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>


int main() {
 struct sockaddr_in SockLocale;
 
 int sock = socket(AF_INET, SOCK_STREAM, 0);
 if(sock==-1) exit(-1);
 
 memset(&SockLocale,0,sizeof(struct sockaddr_in));
 SockLocale.sin_family = AF_INET;
 SockLocale.sin_addr.s_addr = htonl(INADDR_ANY);
 SockLocale.sin_port = htons(25);

 if(bind(sock,(struct sockaddr*)&SockLocale,sizeof(struct sockaddr_in)) != -1) {
  if(listen(sock, 100)<0) {
   printf("Echec de Listen()\n");
   exit(-1);
  }
 }
 else {
  printf("echec de bind()\n");
  exit(-1);
 }
 
 while(1) {
  struct sockaddr_in SockDistant;
  char buffer[512];
  
  socklen_t TailleSock = sizeof(SockDistant);
  memset(&SockDistant,0,sizeof(struct sockaddr_in));
  int s_distant = accept(sock,(struct sockaddr*)&SockDistant,&TailleSock);
  if(s_distant!=-1) {
   printf("CONNEXION ETABLIE\r\n");
   strcpy(buffer,"Hello world !\r\n");
   write(s_distant,buffer,strlen(buffer));
   printf("Chaine \"Hello world !\" envoyée\r\n");
   close(s_distant);
  }
 }
}


Je teste en me connectant avec telnet :
Si je le mets sur le port 2525 (par ex), tout marche bien.
Sur le port 25, tout marche bien aussi à partir de linux.
Par contre, à partir de windows, j'obtiens (coté serveur) :

CONNEXION ETABLIE
Chaine "Hello world !" envoyée
CONNEXION ETABLIE
Chaine "Hello world !" envoyée

Vous voyez, il me l'affiche en double.
Je ne sais pas si ca ne vient pas la configuration de linux (debian) ou bien du programme.
Je ne comprends pas pourquoi ca marche avec telnet sous linux...




Cette discussion est classé dans : serveur, smtp, marche, linux, socket


Répondre à ce message

Sujets en rapport avec ce message

programmation socket sous linux [ par blazman34 ] Bonjour à tous !!Voici mon probleme :Je suis en train de programmer une application client serveur sous linux, tout a bien marcher juska présent juska Soket sous LINUX [ par diablo31170 ] Bonjour à tous le monde, comme le nom l'indique, cela va parler de soscket sous linux (en C++). Il aut savoir que je travaille en mode connecté. Je ch SOCKET ASYNCHRONE LINUX [ par nicompx ] Salut, Je cherche un exemple de communication par socket en C sous LINUX! J'aimerais que plusieurs client puissent laisser des messages au serveur, le [Socket] Connection serveur POP [ par LordBob ] Bonjour a tous,voila j'essai d'écrire une fonction qui me connecte à un serveur POP. voici donc mon code:[code]int iConnect(){    struct        hosten Recv bloque la première fois... [ par rom2n ] Bonjour à tous, je suis en train de programmer un jeu (rpg 2D avec direct3D) en réseau. J'ai structuré mon programme en différentes classes à savoir p Identifier un Client via Socket IP - C++ [ par Jeff_Trek ] Bonjour,J'utilise un Serveur (Socket IP), J'aimerais identifier les clients qui se connecte et déconnecte.Je connais les adresses IP des clients.Si Cl URGENT Plantage Serveur Socket IP [ par Jeff_Trek ] Bonjour J'utilise une application qui posséde en même temps une tache serveur Socket IP plus une tache cliente Socket IP.Lorsque un client se connecte FTP socket, je ne recois rien de la part du serveur [ par MuPuF ] Bonjour, j'essais de recoder des fonctions de wininet en socket, le probleme c'est que lors de ma connection au serveur ftp, il ne m'envois rien, alor envoyer un mail en VC++ par SMTP [ par amizak ] Bonjour tt le monde.je developpe un eapplication pour l'envoie des email avec VC++ en utilisant le protocole smtp.j'utilise ma machine en tant que ser Serveur [ par cht2000 ] Bonjour tout le monde,je cherche à faire un serveur, qui ecoute sur un socket, et qui m'indique le fichier que je viens de lui envoyer sur le socket.


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.