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 | }
|
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....
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 | }
|
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...
Ja. Ich habe vergessen den return_code zu löschen wenn er gesetzt wird.
Vielen Danke für die Antwort.
Carolin
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|