pb tcp ip sur le port 515 (printer)

pb tcp ip sur le port 515 (printer) - C - Programmation

Marsh Posté le 29-06-2004 à 16:20:28    

Bonjour, je dois porgrammer un simulateur d'imprimante.j'ai déja tout programmé il me reste que la liaison a mettre en place;je veut mettre en place une liaison ethernet.
pour cela je dois ecouter le port 515.
En effet je travaille sous linux et je dois recuperer ce que m'envoit lpd .  Voici mon code :#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <stdio.h>
 
#define MAXLINE 4096
#define MASOCKET 515
 
int main(int argc, char **argv)
{
  int listenfd, connfd;
  struct sockaddr_in servaddr;
  char buff[MAXLINE];
  time_t tics;
   
  if ((listenfd = socket(AF_INET, SOCK_STREAM, 0))<0)
    {
      perror("socket error" );                      
      exit(1);
    }
   
  bzero(&servaddr, sizeof(servaddr));
   
  servaddr.sin_family     = AF_INET;
  servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
   
  servaddr.sin_port       = htons(MASOCKET);
 
  if (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
    {    
      perror("bind error" );                        
      exit(1);
    }
   
  if (listen(listenfd, 5) < 0)
    {
      perror("listen error" );
      exit(1);
    }
 
   
    while (1)
      {    
 if ((connfd = accept(listenfd, (struct sockaddr *) NULL, NULL)) < 0)
   {    
            perror("accept error" );      
            exit(1);
   }
   
 
        read(connfd, buff, strlen(buff))
 
   // recuperation des données
   
 
        close(connfd);
      }
}
 
en fait il ne se passe rien quand j'envoit la commande lp toto.txt par exemple.
Je ne comprend car mon prog fonctionne sur un numero de port différent. :bounce:  
 
 
 

Reply

Marsh Posté le 29-06-2004 à 16:20:28   

Reply

Marsh Posté le 29-06-2004 à 20:21:39    

il me semble qu'avec les *nix, seuls les administrateurs peuvent ouvrir des ports < 1000 ? a confirmer


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 30-06-2004 à 08:07:28    

Oui mais je suis administrateur

Reply

Marsh Posté le 30-06-2004 à 13:26:56    

et si tu fais un telnet sur le port 515 de la machine qui fait tourner ce programme, puis que tu envoies des données dans cette session telnet, il ne se passe toujours rien?
Rien de tel qu'un telnet pour vérifier si un serveur réponds bien comme on le pense. C'est sûr qu'après, on ne peut pas envoyer de données binaires, mais au moins tu verras si la connexion est ok.
 
edit:typo


Message édité par SoWhatIn22 le 30-06-2004 à 13:27:22
Reply

Marsh Posté le 30-06-2004 à 14:14:52    

BlackGoddess a écrit :

il me semble qu'avec les *nix, seuls les administrateurs peuvent ouvrir des ports < 1000 ? a confirmer


 
1024 en fait (si je me plante c'est l'air con :D)


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 30-06-2004 à 14:16:36    

Ok je vais essayer un telnet.merci

Reply

Marsh Posté le 30-06-2004 à 14:31:25    

La connexion est ok mais le serveur ne renvoie pas de reponse

Reply

Marsh Posté le 01-07-2004 à 09:08:16    

de quel serveur parles tu (histoire d'être sûr qu'on parle bien de la même chose)?
Dans le code que tu as donné, ton process lit les données et ferme la connexion, mais n'envoie pas de réponse. Donc soit tu t'embrouilles les neurones, soit tu nous donne un code cohérent.

Reply

Marsh Posté le 01-07-2004 à 11:01:51    

Pour moi le serveur est l'application dont j'ai donné le code.C'est le simulateur de l'imprimante.

Reply

Marsh Posté le 01-07-2004 à 11:22:35    

oki.
passe à la 2nde partie de ma réponse alors.

Reply

Marsh Posté le 01-07-2004 à 11:22:35   

Reply

Marsh Posté le 01-07-2004 à 12:02:03    

la fonction accept retourne un descripteur de connection qui est utilisee pour la communication avec le nouveau client.

Reply

Marsh Posté le 01-07-2004 à 13:10:53    

tu attends quoi comme réponse? ton code ne montre *rien* qui ressemble à une réponse.

Reply

Marsh Posté le 01-07-2004 à 14:14:39    

Oui je crois que tu a raison!!!!
Tu mettrais qupoi pour renvoyer une reponse un write
Je te demande ca car je n'y connais rien en reseau.merci

Reply

Marsh Posté le 01-07-2004 à 16:06:24    

send

Code :
  1. const char ack[] = "ok.\n";
  2. if(-1==send(connfd,ack,sizeof ack)) perror("send" );


Reply

Marsh Posté le 02-07-2004 à 07:59:37    

merci pour ta reponse SoWhatln22.Cependant je ne peux la tester que lundi je tedirais alors si ca marche .A+

Reply

Marsh Posté le 05-07-2004 à 11:32:55    

CA marche toujours pas je ne  comprend pas ...

Reply

Marsh Posté le 06-07-2004 à 11:52:28    

alors remplace

Code :
  1. read(connfd, buff, strlen(buff))


par

Code :
  1. recv(connfd, buff, strlen(buff),0)


et

Code :
  1. send(connfd,ack,sizeof ack))


par

Code :
  1. send(connfd,ack,sizeof ack),0)


d'ailleurs le bout de code que je t'ai filé ne devait même pas compiler, je ne sais pas comment tu fais.

Reply

Marsh Posté le 07-07-2004 à 08:04:09    

merci je vais tester ces nouvelles commandes. Pour ce qui est de la compilation il n'y avait aucun pb j'ai juste rajouter des parenthèses.

Reply

Marsh Posté le 12-07-2004 à 11:18:48    

ca ne marche pas mé j'ai trouvé une nouvelle solution

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed