Bonjour, mon programme (serveur) n'arrive pas reconnaitre le protocole tcp, c'est bizzarre.
Voila mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
 
#include<stdio.h>
//#include<sys/types.h>
//#include<sys/socket.h>
//#include<netinet/in.h>
//#include<netdb.h>
#include<winsock2.h>
#include"fonction.h"
 
#define DEFPORTBASE 0
 
/* ce programme alloue un socket correspondant aux arguments passés */
/* par le programme appelant */
 
int setsock(char *service,char *protocol,int queue_len)
 
/* le numéro de port ou nom d'un service connu */
//char *service;
 
/* nom du protocole utilisé TCP ou UDP */
//char *protocole;
 
/* nombre maximum de clients en attente sur le socket */
//int queue_len;
 
{
 struct servent *pse;        /* pointeur sur la structure d'info du service */
 struct protoent *ppe;       /* pointeur sur la structure d'info du protocole */
 struct sockaddr_in server_in; /* structure d'info sur l'adresse du serveur */
 int sock;                     /* descripteur de socket */
 
 int socket_type;  /* type associé au socket : STREAM ou DATAGRAM */
 u_short portbase = DEFPORTBASE;
 
 
 /* mise en place de la structure d'information sur le serveur : server_in */
 
 /* initialisation de la structure server_in à 0 */
 bzero((char*)&server_in,sizeof(server_in));
 
 /* mise en place de la famille d'adresse */
 server_in.sin_family = AF_INET;
 server_in.sin_addr.s_addr = INADDR_ANY;
 
 /* mise en place du numéro de port du service */
 if(pse = getservbyname(service,protocol))
        {
         /* cas où le service est désigné par son nom */
         server_in.sin_port = htons(ntohs((u_short)pse->s_port)+portbase);                                  
        }    
 /* cas où le service est désigné par un numéro de port */
 else if(server_in.sin_port = htons((u_short)atoi(service))==0)
                            {
                             /* cas d'erreur sur le service */
                             printf("ce service n'exite pas : %s\n",service);
                             exit(1);                                    
                            }
 
 /* mise en place de la structure d'information sur le protocole */
 
 if((ppe = getprotobyname(protocol))==0)
         {
          printf("Protocole %s inconnu \n",protocol);
          getch();
          exit(1);                               
         }
 
 /* allocation de socket */
 if(strcmp(protocol,"udp")==0) socket_type = SOCK_DGRAM;
 else socket_type = SOCK_STREAM;
 
 /* création du socket avec le protocole choisi */
 sock = socket(PF_INET,socket_type,ppe->p_proto);
 
 if(sock<0)
           {
            printf("impossible de créer un socket : \n");
            exit(1);                                      
           }
 
 /* lien avec le port */
 if(bind(sock,(struct sockaddr*)&server_in,sizeof(server_in))<0)
                      {
                       printf("impossible de lier le port %s",service); 
                       exit(1);                                         
                      }
 
 /* on met le socket en mode passif dans le cas d'un serveur fonctionnant */
 /* en mode connecté */
 if(socket_type == SOCK_STREAM)
                {
                 if(listen(sock,queue_len)<0)
                           {
                            printf("impossible de mettre le port %s en attente de requètes \n",service);
                            exit(1);                  
                           }               
                }
 
 /* on renvoie le descripteur de socket alloué */
 return(sock);
}
/* fin de setsock */
il s'arrete donc comme vous pouvez voir dans le code a : "protocole tcp inconnu"
Le sevice est le 8081
Je me disais que peut etre les protocoles portent des noms particulier comme par ex tcp211 ou autre???