Je suis en train de développer une application C++ dans openSUSE 12.3 et l'une de ses parties est chargée d'envoyer des données à un périphérique via Socket (en LAN). J'utilise ce codeProgrammation de socket sous Linux en C++
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *printer;
portno = 9100;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0) error("ERROR opening socket\n");
printer = gethostbyname("100.0.69.23");
if(printer == NULL) error("No such device on 100.0.69.23\n");
//set bit set to zero
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *) printer->h_addr, (char *) &serv_addr.sin_addr.s_addr, printer- >h_length);
serv_addr.sin_port = htons(portno);
if(connect(sockfd, (struct sockaddr *) & serv_addr, sizeof(serv_addr)) < 0)
{error("ERROR connecting");
return;
}
n = write(sockfd, data, datalenght);
if(n < 0) error("ERROR sending command to printer");
n = read(sockfd, buffer, 200);
Je pense que le code est correct, mais la fonction de connexion renvoie -1 et semble ne pouvait pas se connecter au périphérique (imprimante). Ce code a été écrit dans openSUSE 11 et fonctionnait correctement et je pouvais envoyer/recevoir des données à l'appareil mais quand je le copiais/le collais sur un nouveau système (openSUSE 12.3), il me donnait un échec de connexion. Le résultat de ping sur l'adresse IP spécifique qui est utilisée indique que le périphérique est accessible via LAN
combien d'octets envoyez-vous à l'imprimante? – suspectus
Vous vérifiez pour 'printer' avant d'être initialisé, puis après. Ce n'est pas bon. –
En outre, quelle est exactement l'erreur que 'connect()' renvoie? Il doit avoir 90% de la réponse à votre question. –