Accueil > Forum > > > > Prog C - Socket Windows ....
Prog C - Socket Windows ....
lundi 19 avril 2004 à 00:48:28 |
Prog C - Socket Windows ....

JimyRyan
|
Bonjour. Je suis sur le point de finir un programme d'envoie de mail automatique avec pièce jointe. Mon problème est le suivante : Lors de l'envoie de la pièce jointe, mon socket (bloquant) n'attend pas que toute les données (variable celon la taille de la pièce jointe) soit parvenues au serveur de courrier pour cloturer la transaction (envoie de "." pour cloturer le champ DATA, puis "QUIT" pour indiquer que la composition du mail est terminée). Pour le moment j'ai trouver une solution : utiliser un Sleep pour que les données est le temps d'êtres transmisent avant la cloturation du mail. Cependant cette méthode marche si auqu'un trafic n'est présent lors de l'envoie, si un upload est en court, mon Sleep ne colle plus a ma Bande passante disponnible pour l'envoie. Si quelqu'un aurais une idee... Voici mon code : Détailes sur mon socket //parametrage du socket WSAStartup(MAKEWORD(2,0), &WSAData);//initialise le socket (indique la version utilisee,...) sin.sin_addr.s_addr = inet_addr(IPServer);//adresse IP du server a joindre sin.sin_family = AF_INET;//protocole IP sin.sin_port = htons(25);//le N° de port du server ou l'on va ce connecter mySocket = socket(AF_INET,SOCK_STREAM,0);//SOCK_STREAM : ouvrent une conn entre les 2 ordinateurs directe et pourra ensuite envoyer les paquets que vous désirez //Paramétrage de la socket setsockopt(mySocket,SOL_SOCKET,SO_DONTLINGER,(char*)0,sizeof(0)); bind(mySocket, (SOCKADDR *)&sin, sizeof(sin));//lie le socket a l'adresse et au N° de port definit plus haut //connexion au server strcpy(reponceServer,"\0"); connect(mySocket, (SOCKADDR *)&sin, sizeof(sin));//la connexion avec le server et etablie apres cette ligne if (recv(mySocket,reponceServer,200,0) > 20) printf("\nConnexion etablie\n"); //rend le socket non bloquant ioctlsocket(mySocket,FIONBIO,&ioctl_blocking);
|
Dans Envoie de la pièce joint (donnee_A_Transmetre) encode en base 64 - fonction non montrée ici; On voix ici le Sleep qui est basé sur 10KO/sec => si un peu de trafic existe les 10KO/Sec ne sont plus disponibles, le temps d'attente n'est pas asser long => le mail ne sera pas valide. Process(donnee_A_Transmetre,mySocket,tailleFichierAEnvoyer); Sleep((tailleFichierAEnvoyer/10000)*1000);//vitess de tranmission : 10KO/Sec sens up
|
Ma fonction d'envoie dans mon socket. //donner a trenmetre, nom du socket, reponce du server attendu void Process(char *donneeATransmettre,SOCKET mySocket,unsigned long tailleDesDonnee) { //la variable taulleDesDonnee est tjs a 0 sauf que on envoie le fichier unsigned long sizeP = strlen(donneeATransmettre); unsigned long retVal; int reponceServer_OctetRecu = 0; char reponceServer[21]; //Besoin d'une pause pour les gros fichiers if(tailleDesDonnee >= 51200) Sleep(2000); if(!tailleDesDonnee)retVal = send(mySocket,donneeATransmettre,sizeP,0); else retVal = send(mySocket,donneeATransmettre,tailleDesDonnee,0); //si on envoie avant la reponce du server, le mail ne peut pas etre envoyer reponceServer_OctetRecu = recv(mySocket,reponceServer,20,0);//20 => lit 20 octets while (reponceServer_OctetRecu == 0) Sleep(1); }
|
|
|
lundi 19 avril 2004 à 10:45:13 |
Re : Prog C - Socket Windows ....

c2millet
|
Je pense que si tu mettait une boucle while sur ton "recv"ça marcherait mieux. ;-) Tant que tu napas reçu de réponse du serveur tu fait ton "recv" N'oubli de mettre un time out car en cas de pb avec le serveur ton appli sera bloqué
Cmill
|
|
lundi 19 avril 2004 à 23:00:28 |
Re : Prog C - Socket Windows ....

JimyRyan
|
Je ne peut utiliser ton conseil car le serveur SMTP (par exemple smtp.wanadoo.fr) dans le cas ou il se trouve dans le champ DATA, ne renvoie auqun'une information a mon client. Le serveur SMTP répond une fois le "." de fin envoie. or entre la fin de la transaction de l'envoie des données de la pièces jointe et le "." je doit envoyer d'autres information....
|
|
mardi 20 avril 2004 à 09:52:26 |
Re : Prog C - Socket Windows ....

c2millet
|
J'ai essayé en session telnet le data me revoit bien qq chose pour wanadoo. J'ai moi mm réalisé un envoie d'email-auto qui reçoit bien le retour du serveur a l'envoie de data. Mais il me renvoi une erreur.Mais je pense que cela vient du fait que ce n'est po mon fournisseur. Voilà peu po t'aidé plus........ :-/
Essaie en session telnet si ça te renvoi qq chose pour data(ce qui serait logique) ça vient de ton appli
Cmill
|
|
Cette discussion est classée dans : code, envoie, socket, sin, mysocket
Répondre à ce message
Sujets en rapport avec ce message
Probleme sockets de mer** [ par zzzzzz ]
bé je suis plus quoi faire j'en suis toujours au meme prob y'en a 1 qui me dit d'utiliser strstr() l'autre strcmp() fin bref ca serrais sympas si quel
Problème d'envoie par socket [ par CyberP ]
J'ai fait un programme qui se connecte à un serveur ftp (le serveur ftp est aussi sur mon ordi). Je me connecte avec la fonction connect() et je recoi
LERREUR QUI TUE §§§§§§§§§§§§§§§§ [ par Avalon10101 ]
Vla jai fé mon prog tout é juste mais ya une erreur que je narrive vraiment pas à comprendre ! :C:\Documents and Settings\Alex\Mes documents\Makefile.
pb socket [ par surfeurnet ]
voici mon programme qui a pour l'instant pour unique but de se connecter à un serveur :# include # include # pragma comment (lib,"w32_32.lib")char ip,
prob sock [ par epoc ]
voilà, g commencé la prog des socks en vc++, mais rien ne transitte alors que la connexion semble être bien effectuée, voilà le code :****************
TimeOut sur un socket [ par djosh ]
Voici un bout de code des sources du logiciel VNC, la fonction connect(). Mon but est de réduire le temps de réponse (message:"failed to connect to se
Probleme de Client Serveur [ par Krox68 ]
voila jaimerais faire un programme client qui puisse se connecter a ce serveur : #include void main(){ WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WS
Probleme de sockets [ par MaDC ]
J'ai fait ça, mais la reception ferme mon appli mfc sans raison... biens ur on ne reçoit rien... si qq1 pouvait m'éclairer se serait sympa de sa part
Socket (getpeername) [ par petitchech ]
Bonjour,Quand je fai sa sa me fai getpeername Esque quelqu'on peut m'aider ?if(getpeername(server,(struct sockaddr*) &adresse,&taille) printf("\n
Erreur 10049 sur socket UDP [ par Ezekiel69 ]
Salut tous le monde...Me voici depuis plusieurs jour confronté un a problème étrange.Je veux envoyer un message par l'intermédiaire d'un packet UDP su
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|