Orjanp Skrevet 30. august 2004 Del Skrevet 30. august 2004 (endret) Har sett meg blind på koden og trenger hjelp til å finne årsaken til feilmeldingene. /******************************************************************************* *Filname :fserver.c *Made by : Ørjan Pettersen *Assingment number : DATE VERSION BY CHANGE ======================================================================= Short description : *******************************************************************************/ // includes. #include <sys/socket.h> #include <netinet/in.h> #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <arpa/inet.h> #include <sys/wait.h> #include <signal.h> #define SERV_TCP_PORT 15151 #define SERV_UDP_PORT 14141 #define BUF_SIZE 4000 #define BACKLOG = 10 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ //main //linje 40 int main(void) { int sockfd, newfd, filefd, buffill; char buf[BUF_SIZE]; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int addrlen = sizeof(struct sockaddr_in); int numBytes; //TCP socket style if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { //linje 50 perror("Socket() call failed"); exit(EXIT_FAILURE); } my_addr.sin_family = AF_INET; my_addr.sin_addr.s_addr = INADDR_ANY; my_addr.sin_port = htons(SERV_TCP_PORT); memset(&(my_addr.sin_zero), '\0', 8); //Bind a name to a socket. //linje 60 if(bind(sockfd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr)) == -1) { perror("Bind() call failed"); exit(EXIT_FAILURE); } //Listen for a connection if(listen(sockfd, BACKLOG) == -1) { perror("listen failed"); exit(EXIT_FAILURE); } //linje 70 while(1) { //Accept connection if((newfd = accept(sockfd, (struct sockadr *) &their_addr, &addrlen)) == -1) { perror("accept call failed"); exit(EXIT_FAILURE); } printf("server: got connection from %s\n", inet_ntoa(their_addr.sin_addr)); //linje 80 while(addrlen != 0) { numBytes = recv(newfd, buf, BUF_SIZE-1, 0); buf[numBytes] = '\0'; printf("RECV: %s", buf); } } close(sockfd); close(newfd); return 0; } //linje 90 feilmeldinger ved kompilering [orjanp@ArchThinkpad div]$ gcc -o fserver fserver.c fserver.c: In function `main': fserver.c:67: error: parse error before '=' token fserver.c: At top level: fserver.c:72: error: parse error before "while" fserver.c:76: error: parse error before numeric constant fserver.c:76: error: conflicting types for 'exit' fserver.c:76: error: conflicting types for 'exit' fserver.c:76: warning: data definition has no type or storage class fserver.c:79: error: parse error before string constant fserver.c:83: error: `numBytes' undeclared here (not in a function) fserver.c:83: warning: data definition has no type or storage class fserver.c:84: error: parse error before string constant fserver.c:84: error: conflicting types for 'printf' fserver.c:84: note: a parameter list with an ellipsis can't match an empty parameter name list declaration fserver.c:84: error: conflicting types for 'printf' fserver.c:84: note: a parameter list with an ellipsis can't match an empty parameter name list declaration fserver.c:84: warning: data definition has no type or storage class fserver.c:88: warning: parameter names (without types) in function declaration fserver.c:88: warning: data definition has no type or storage class fserver.c:88: warning: parameter names (without types) in function declaration fserver.c:88: warning: data definition has no type or storage class fserver.c:89: error: parse error before "return" fserver.c:83: error: storage size of `buf' isn't known Noen som kan hjelpe? Endret 30. august 2004 av Orjanp Lenke til kommentar
saboi Skrevet 30. august 2004 Del Skrevet 30. august 2004 #define BACKLOG = 10 if(listen(sockfd, BACKLOG) == -1) { det var det jeg så sånn ved første øyekast sikkert noe annet også men jeg er trøtt. Lenke til kommentar
søppel Skrevet 30. august 2004 Del Skrevet 30. august 2004 (endret) Dette er noe av grunnen til at man bør bruke const fremfor macroer og defines. Med en brukende kompiler gir det deg 0 tap uansett. Edit: #include <iostream> using namespace std; int main () { #define BACKLOG = 10 int i BACKLOG; cout << i << endl; return(0); } // main ..artig.. :] Edit2: Mange feilmeldinger er ofte følgefeil btw. Endret 30. august 2004 av søppel Lenke til kommentar
Orjanp Skrevet 30. august 2004 Forfatter Del Skrevet 30. august 2004 #define BACKLOG = 10if(listen(sockfd, BACKLOG) == -1) { det var det jeg så sånn ved første øyekast sikkert noe annet også men jeg er trøtt. Takk for den. Da da var allt i orden Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå