Bonjour,

Je suis en train d'essayer de programmer un serveur et un client en mode UDP mais perror me renvoi juste apres sendto() et rcvfrom() : Illegal Seek...

Malheuresement je n'arrive pas a voir d'ou vient le problème.

Voici mes deux codes :

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
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
 
#define PORT_A 2110
 
int main()
  {
  struct sockaddr_in adr_client;
  struct hostent *host;
  int len_adr_client;
  int desc;
  int i;
  char buffer[4];
  char *localhost="localhost";
 
  if((desc = socket(AF_INET, SOCK_DGRAM, 0))<0)
    perror("Socket");
 
  adr_client.sin_family = AF_INET;
 
  if((host = gethostbyname(localhost)) == NULL)
    perror("Gethostbyname");
 
  (void) bcopy( (char *)(*host).h_addr, (char *) &adr_client.sin_addr, (*host).h_length );
 
  adr_client.sin_port = htons(PORT_A);
 
  len_adr_client = sizeof(adr_client);
 
  printf("Numéro de port = %i\n", PORT_A);
 
  for(i=0;i<5;i++)
    {
    sprintf(buffer, "%i", i);
 
    if((sendto(desc, buffer, strlen(buffer)+1, 0, (struct sockaddr *)&adr_client, len_adr_client))<0);
      perror("SendTo");
 
    printf("Truc envoyé\n");
    fflush(stdout);
    }
 
  return 0;
  }
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
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <netinet/in.h>
#include <stdio.h>
 
#define PORT_A 2110
 
int main()
  {
  int i;
  int sock_rdv;
  int sock_service;
  int len_adr_client;
  int len_adr_serveur;
  int end;
  struct sockaddr_in adr_machine;
  struct sockaddr_in adr_client;
  char buffer[256];
 
  if((sock_rdv = socket(AF_INET, SOCK_DGRAM, 0))<0)
    perror("Socket");
 
  adr_machine.sin_port = htons(PORT_A);
  adr_machine.sin_addr.s_addr = INADDR_ANY;
  adr_machine.sin_family = AF_INET;
 
  printf("Numéro de port = %i\n", PORT_A);
  fflush(stdout);
 
  len_adr_serveur = sizeof(adr_machine);
 
  if((bind(sock_rdv, (struct sockaddr *)&adr_machine, len_adr_serveur))<0)
    perror("Bind");
 
  len_adr_client = sizeof(adr_client);
 
  while(1)
    {
    if((end=recvfrom(sock_rdv, buffer, strlen(buffer)+1, 0, (struct sockaddr *)&adr_machine, &len_adr_serveur))<0);
      perror("RecvFrom");
 
    buffer[end] = '\0';
 
    printf("Texte recu : %s\n",buffer);
    fflush(stdout);
    }
  return 0;
  }
Merci d'avance.