C/C++ UDP Server

OP #844458
Lesenswert?
• ▲
▼
Hallo Leute,
ich bin wieder. Ich habe folgende Code geschrieben. Es läuft alles gut 
wenn return_code== RETURN_OKAY.
Die Daten wird immer gescheckt. Wenn eine fertig ist dann wird 2.Daten 
kommen und wieder überprüfen usw.
Es läuft aber nicht mehr Wenn return_code != RETURN_OKAY dann hängt mein 
Programm. Ich weiß gerade nicht wo das Problem liegt.
Es wäre nett wenn ihr mir das zeigen könnte.

Carolin
1
#define MAX 1024
2
#define SERVER_PORT 5000
3
int main(){
4
int sockfd;
5
  int byte;
6
  uint8 puffer[MAX];
7
  uint8 *cpData;
8
  sockfd = create_socket(AF_INET, SOCK_DGRAM, 0);
9
  printf("create a socket\n");
10
  bind_socket(&sockfd, "168.100.0.1", SERVER_PORT);
11
  while(1){
12
    memset(puffer, 0, MAX);
13
    while((byte = UDP_recv(&sockfd, puffer, MAX)) >0){
14
      puffer[byte] = '\0';
15
      cpData = puffer;
16
      cpData = check1(cpData);
17
      if(return_code != RETURN_OKAY)
18
      continue;
19
      printf("check1 korrekt\n");
20
      cpData += 8;  
21
      cpData = check2(cpData);  
22
      if(return_code != RETURN_OKAY)
23
      continue;
24
       printf("check2 korrekt\n");
25
       UDP_send(&sockfd, puffer, byte, "168.100.0.155", 5001);
26
    }  
27
  }
28
  
29
  ///return to main
30
  return 0;
31
}
#844472
Lesenswert?
• ▲
▼
Abgesehen davon, daß der Code nicht gerade übersichtlich formatiert ist 
(gut, es gibt schlimmeres) und die gerufenen Funktionen fehlen....
Kann es sein, daß dein Client erst wieder Daten schickt, wenn er eine 
Bestätigung bekommen hat?
1
UDP_send(&sockfd, puffer, byte, "168.100.0.155", 5001);
 wird nie gerufen, wenn return_code != RETURN_OKAY....
OP #844488
Lesenswert?
• ▲
▼
Bernhard M. wrote:
> Abgesehen davon, daß der Code nicht gerade übersichtlich formatiert ist
> (gut, es gibt schlimmeres) und die gerufenen Funktionen fehlen....
In der gerufen Funktion(check1 und check2) werden die Daten nur 
verglichen und return_code wird gesetzt(also nicht mehr RETURN_OKAY) 
wenn nicht gleich
die andere Funktionen wie create_socket sind ähnlich(nur die Befehle 
unterschiedlich) wie z.B
1
int create_socket(int domain, int type, int protokoll){
2
int sock;
3
sock = socket(domain, type, protokoll);
4
if(sock < 0){
5
perror("socket()");
6
exit(10);
7
}
8
return sock;
9

10
}
> Kann es sein, daß dein Client erst wieder Daten schickt, wenn er eine
> Bestätigung bekommen hat?
>
1
UDP_send(&sockfd, puffer, byte, "168.100.0.155", 5001);
 wird nie
> gerufen, wenn return_code != RETURN_OKAY....

Der Client wird die Daten immer schicken auch wenn der keine Bestätigung 
bekommt.
Nur die bestimmte Daten soll wieder zu Client geschickt werden


Wenn ich ein Test unter cpData = Check1(..) wie folgt mache
1
#define MAX 1024
2
#define SERVER_PORT 5000
3
int main(){
4
int sockfd;
5
  int byte;
6
  uint8 puffer[MAX];
7
  uint8 *cpData;
8
  sockfd = create_socket(AF_INET, SOCK_DGRAM, 0);
9
  printf("create a socket\n");
10
  bind_socket(&sockfd, "168.100.0.1", SERVER_PORT);
11
  while(1){
12
    memset(puffer, 0, MAX);
13
    while((byte = UDP_recv(&sockfd, puffer, MAX)) >0){
14
      puffer[byte] = '\0';
15
      cpData = puffer;
16
      cpData = check1(cpData);
17
//Wenn return_code in der Funktion check1 gesetzt wird
18
     
19
      printf("hier noch??");
20

21
      //diese "hier noch??" wird noch ausgegeben
22
 
23
      if(return_code != RETURN_OKAY)//diese Zeile wird nicht gearbeitet
24
      continue;
25
      printf("check1 korrekt\n");
26
      cpData += 8;  
27
      cpData = check2(cpData); //hier auch genauso 
28
      if(return_code != RETURN_OKAY)
29
      continue;
30
       printf("check2 korrekt\n");
31
       UDP_send(&sockfd, puffer, byte, "168.100.0.155", 5001);
32
    }  
33
  }
34
  
35
  ///return to main
36
  return 0;
37
}
#844498
Lesenswert?
• ▲
▼
na ja...
1
      printf("hier noch??");
2

3
      //diese "hier noch??" wird noch ausgegeben
4
 
5
      if(return_code != RETURN_OKAY)//diese Zeile wird nicht gearbeitet
6
      continue;
7
      printf("check1 korrekt\n");
die Zeile if(return_code... wird natürlich abgearbeitet, aber der 
printf("check1 korrekt\n"); kommt nicht mehr wegen dem continue 
darüber...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren