simon91 | Bonjour,
Voilà je suis un débutant en python et j'ai implémenté pour tester une connexion un client et un serveur en langage C. J'aimerais le traduire en python mais j'ai un peu de mal.
client.c
Code :
- //verifie qu'un appel systeme s'est bien passe
- void try(int resultat, char * name){
- if (resultat < 0){
- perror(name);
- exit(1);
- }
- }
- int main(int ac, char * av[]){
- struct addrinfo souhait, * info;
- int sock, t;
- char buffer[1024];
- if (ac != 3){
- fprintf(stderr, "usage: %s machine port\n", av[0]);
- exit(1);
- }
- // formatter l'adresse
- memset(&souhait, 0, sizeof souhait);
- souhait.ai_family = AF_UNSPEC;
- souhait.ai_socktype = SOCK_STREAM;
- if ((t = getaddrinfo(av[1], av[2], &souhait, &info)) != 0){
- fprintf(stderr, "erreur %s sur %s:%s\n", gai_strerror(t), av[1], av[2]);
- exit(1);
- }
- try(sock = socket(info->ai_family, info->ai_socktype, info->ai_protocol), "socket" );
- try(connect(sock, info->ai_addr, info->ai_addrlen), "connect" );
- while((t = read(0, buffer, sizeof buffer)) > 0){
- write(sock, buffer, t);
- if ((t = read(sock, buffer, sizeof buffer)) <= 0)
- break;
- write(1, buffer, t);
- }
- try(t, "read" );
- exit(t < 0);
- }
|
serveur.c
Code :
- int global_sock;
- char *traiter(char in[], int ln){
- in[ln] = 0;
- return in;
- }
- //verifie qu'un appel système s'est bien passé
- static void
- try(int resultat, char * name){
- if (resultat < 0){
- perror(name);
- exit(1);
- }
- }
- int main(int ac, char * av[]){
- struct addrinfo souhait, * info;
- int guichet, data, t;
- char buffer[1024], * reponse;
- if (ac != 2){
- fprintf(stderr, "usage: %s port\n", av[0]);
- exit(1);
- }
- memset(&souhait, 0, sizeof souhait);
- souhait.ai_family = AF_UNSPEC;
- souhait.ai_socktype = SOCK_STREAM;
- souhait.ai_flags = AI_PASSIVE;
- if ((t = getaddrinfo(0, av[1], &souhait, &info)) != 0){
- fprintf(stderr, "erreur %s sur le port %s\n", gai_strerror(t), av[1]);
- exit(1);
- }
- // fabriquer la socket et y obtenir une connexion sur une autre socket
- try(guichet = socket(info->ai_family, info->ai_socktype, info->ai_protocol), "socket" );
- try(bind(guichet, info->ai_addr, info->ai_addrlen), "bind" );
- try(listen(guichet, 1), "listen" );
- try(data = accept(guichet, 0, 0), "accept" );
- try(close(guichet), "close" );
- // lire, traiter, répondre
- while((t = read(data, buffer, sizeof buffer)) > 0){
- global_sock = data;
- reponse = traiter(buffer, t);
- try(write(data, reponse, strlen(reponse)), "write" );
- }
- try(t, "read" );
- exit(0);
- }
|
Merci d'avance pour l'aide !
|