Socket ?
-
Hallo,
ich google nun seid Stunden durch das Weite Weite... Internet und finde irgendwie nichts was ich gebrauchen kann könnt ihr mir einen einfachen Code für einen Client der nur zu einen Server verbindet und die Empfangenden Nachrichten ausgibt... Ich schaffe es absolut nicht...Beispiel reicht mir schon aber bitte nich so kompliziertes habe vorher nur unter Windows programmiert...
Gruß
-
hmmm ... seit Stunden ? ... innerhalb einer minute findet man viele brauchbare sachen zu dem thema ... dieser hier ist recht gut http://www.ecst.csuchico.edu/~beej/guide/net/
hf ... TDO
-
Danke aber so richtig klappen tut es nicht nehmen wir mal dieses Beispiel :
/* ** client.c -- a stream socket client demo */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #define PORT 3490 // the port client will be connecting to #define MAXDATASIZE 100 // max number of bytes we can get at once int main(int argc, char *argv[]) { int sockfd, numbytes; char buf[MAXDATASIZE]; struct hostent *he; struct sockaddr_in their_addr; // connector's address information if (argc != 2) { fprintf(stderr,"usage: client hostname\n"); exit(1); } if ((he=gethostbyname(argv[1])) == NULL) { // get the host info perror("gethostbyname"); exit(1); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } their_addr.sin_family = AF_INET; // host byte order their_addr.sin_port = htons(PORT); // short, network byte order their_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the struct if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) { perror("connect"); exit(1); } if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) { perror("recv"); exit(1); } buf[numbytes] = '\0'; printf("Received: %s",buf); close(sockfd); return 0; }
Ich kompiliere es mit gcc main.c -o main . Und bekomme folgende Fehler :
In file included from main.c:6:
/usr/include/unistd.h:539: error: parse error before "confstr"
/usr/include/unistd.h:539: error: parse error before "size_t"
/usr/include/unistd.h:708: error: parse error before "size_t"
/usr/include/unistd.h:733: error: parse error before "size_t"
In file included from main.c:6:
/usr/include/unistd.h:784: error: parse error before "size_t"
/usr/include/unistd.h:791: error: parse error before "size_t"
/usr/include/unistd.h:801: error: parse error before "size_t"
/usr/include/unistd.h:802: error: parse error before "size_t"
/usr/include/unistd.h:819: error: parse error before "size_t"
In file included from main.c:8:
/usr/include/string.h:39: error: parse error before "size_t"
/usr/include/string.h:42: error: parse error before "size_t"
/usr/include/string.h:51: error: parse error before "size_t"
/usr/include/string.h:58: error: parse error before "size_t"
/usr/include/string.h:61: error: parse error before "size_t"
/usr/include/string.h:65: error: parse error before "size_t"
/usr/include/string.h:86: error: parse error before "size_t"
/usr/include/string.h:93: error: parse error before "size_t"
/usr/include/string.h:99: error: parse error before "size_t"
/usr/include/string.h:106: error: parse error before "strxfrm"
/usr/include/string.h:107: error: parse error before "size_t"
/usr/include/string.h:176: error: parse error before "strcspn"
/usr/include/string.h:180: error: parse error before "strspn"
/usr/include/string.h:230: error: parse error before "strlen"
/usr/include/string.h:248: error: parse error before "size_t"
/usr/include/string.h:253: error: parse error before "size_t"
/usr/include/string.h:257: error: parse error before "size_t"
/usr/include/string.h:260: error: parse error before "size_t"
/usr/include/string.h:263: error: parse error before "size_t"
/usr/include/string.h:291: error: parse error before "size_t"
In file included from /usr/include/sys/uio.h:29,
from /usr/include/sys/socket.h:27,
from /usr/include/netinet/in.h:24,
from /usr/include/netdb.h:28,
from main.c:9:
/usr/include/bits/uio.h:45: error: parse error before "size_t"
In file included from /usr/include/sys/socket.h:35,
from /usr/include/netinet/in.h:24,
from /usr/include/netdb.h:28,
from main.c:9:
/usr/include/bits/socket.h:221: error: parse error before "size_t"
/usr/include/bits/socket.h:224: error: parse error before "msg_controllen"
/usr/include/bits/socket.h:227: error: parse error before '}' token
/usr/include/bits/socket.h:232: error: parse error before "size_t"
/usr/include/bits/socket.h:239: error: parse error before '}' token
In file included from /usr/include/netinet/in.h:24,
from /usr/include/netdb.h:28,
from main.c:9:
/usr/include/sys/socket.h:136: error: parse error before "size_t"
/usr/include/sys/socket.h:143: error: parse error before "size_t"
/usr/include/sys/socket.h:150: error: parse error before "size_t"
/usr/include/sys/socket.h:161: error: parse error before "size_t"
In file included from /usr/include/netdb.h:33,
from main.c:9:
/usr/include/rpc/netdb.h:61: error: parse error before "size_t"
/usr/include/rpc/netdb.h:65: error: parse error before "size_t"
/usr/include/rpc/netdb.h:69: error: parse error before "size_t"
In file included from main.c:9:
/usr/include/netdb.h:162: error: parse error before "size_t"
/usr/include/netdb.h:169: error: parse error before "size_t"
/usr/include/netdb.h:175: error: parse error before "size_t"
/usr/include/netdb.h:181: error: parse error before "size_t"
/usr/include/netdb.h:232: error: parse error before "size_t"
/usr/include/netdb.h:238: error: parse error before "size_t"
/usr/include/netdb.h:244: error: parse error before "size_t"
/usr/include/netdb.h:304: error: parse error before "size_t"
/usr/include/netdb.h:310: error: parse error before "size_t"
/usr/include/netdb.h:315: error: parse error before "size_t"
/usr/include/netdb.h:370: error: parse error before "size_t"
/usr/include/netdb.h:375: error: parse error before "size_t"
/usr/include/netdb.h:380: error: parse error before "size_t"
/usr/include/netdb.h:430: error: parse error before "size_t"
/usr/include/gconv.h:176: warning: array__data' assumed to have one element /usr/include/bits/socket.h:237: warning: array
__cmsg_data' assumed to have one element
berlin188:/home/server/c++ # gcc main.c -o main
main.c:1: error: parse error before '.' token
In file included from /usr/include/_G_config.h:44,
from /usr/include/libio.h:32,
from /usr/include/stdio.h:72,
from main.c:4:
/usr/include/gconv.h:72: error: parse error before "size_t"
/usr/include/gconv.h:88: error: parse error before "size_t"
/usr/include/gconv.h:97: error: parse error before "size_t"
/usr/include/gconv.h:174: error: parse error before "size_t"
/usr/include/gconv.h:177: error: parse error before '}' token
In file included from /usr/include/libio.h:32,
from /usr/include/stdio.h:72,
from main.c:4:
/usr/include/_G_config.h:47: error: field__cd' has incomplete type /usr/include/\_G\_config.h:50: error: field
__cd' has incomplete type
In file included from /usr/include/stdio.h:72,
from main.c:4:
/usr/include/libio.h:350: error: parse error before "size_t"
/usr/include/libio.h:359: error: parse error before "size_t"
/usr/include/libio.h:467: error: parse error before "_IO_sgetn"
/usr/include/libio.h:467: error: parse error before "size_t"
In file included from main.c:4:
/usr/include/stdio.h:304: error: parse error before "size_t"
/usr/include/stdio.h:311: error: parse error before "size_t"
/usr/include/stdio.h:353: error: parse error before "size_t"
/usr/include/stdio.h:357: error: parse error before "size_t"
/usr/include/stdio.h:602: error: parse error before "fread"
/usr/include/stdio.h:602: error: parse error before "size_t"
/usr/include/stdio.h:608: error: parse error before "fwrite"
/usr/include/stdio.h:608: error: parse error before "size_t"
/usr/include/stdio.h:630: error: parse error before "fread_unlocked"
/usr/include/stdio.h:630: error: parse error before "size_t"
/usr/include/stdio.h:632: error: parse error before "fwrite_unlocked"
/usr/include/stdio.h:632: error: parse error before "size_t"
In file included from main.c:5:
/usr/include/stdlib.h:137: error: parse error before "__ctype_get_mb_cur_max"
In file included from /usr/include/sys/types.h:266,
from /usr/include/stdlib.h:416,
from main.c:5:
/usr/include/bits/pthreadtypes.h:48: error: parse error before "size_t"
/usr/include/bits/pthreadtypes.h:51: error: parse error before "__stacksize"
In file included from main.c:5:
/usr/include/stdlib.h:433: error: parse error before "size_t"
/usr/include/stdlib.h:462: error: parse error before "size_t"
/usr/include/stdlib.h:556: error: parse error before "__size"
/usr/include/stdlib.h:558: error: parse error before "__nmemb"
/usr/include/stdlib.h:567: error: parse error before "size_t"
In file included from /usr/include/stdlib.h:578,
from main.c:5:
/usr/include/alloca.h:33: error: parse error before "__size"
In file included from main.c:5:
/usr/include/stdlib.h:583: error: parse error before "__size"
/usr/include/stdlib.h:739: error: parse error before "size_t"
/usr/include/stdlib.h:743: error: parse error before "size_t"
/usr/include/stdlib.h:812: error: parse error before "size_t"
/usr/include/stdlib.h:815: error: parse error before "size_t"
/usr/include/stdlib.h:819: error: parse error before "size_t"
/usr/include/stdlib.h:822: error: parse error before "size_t"
/usr/include/stdlib.h:830: error: parse error before "size_t"
/usr/include/stdlib.h:834: error: parse error before "size_t"
/usr/include/stdlib.h:841: error: parse error before "mbstowcs"
/usr/include/stdlib.h:842: error: parse error before "size_t"
/usr/include/stdlib.h:844: error: parse error before "wcstombs"
/usr/include/stdlib.h:845: error: parse error before "size_t"
In file included from main.c:6:
/usr/include/unistd.h:313: error: parse error before "size_t"
/usr/include/unistd.h:319: error: parse error before "size_t"
/usr/include/unistd.h:449: error: parse error before "size_t"
In file included from main.c:6:
/usr/include/unistd.h:539: error: parse error before "confstr"
/usr/include/unistd.h:539: error: parse error before "size_t"
/usr/include/unistd.h:708: error: parse error before "size_t"
/usr/include/unistd.h:733: error: parse error before "size_t"
In file included from main.c:6:
/usr/include/unistd.h:784: error: parse error before "size_t"
/usr/include/unistd.h:791: error: parse error before "size_t"
/usr/include/unistd.h:801: error: parse error before "size_t"
/usr/include/unistd.h:802: error: parse error before "size_t"
/usr/include/unistd.h:819: error: parse error before "size_t"
In file included from main.c:8:
/usr/include/string.h:39: error: parse error before "size_t"
/usr/include/string.h:42: error: parse error before "size_t"
/usr/include/string.h:51: error: parse error before "size_t"
/usr/include/string.h:58: error: parse error before "size_t"
/usr/include/string.h:61: error: parse error before "size_t"
/usr/include/string.h:65: error: parse error before "size_t"
/usr/include/string.h:86: error: parse error before "size_t"
/usr/include/string.h:93: error: parse error before "size_t"
/usr/include/string.h:99: error: parse error before "size_t"
/usr/include/string.h:106: error: parse error before "strxfrm"
/usr/include/string.h:107: error: parse error before "size_t"
/usr/include/string.h:176: error: parse error before "strcspn"
/usr/include/string.h:180: error: parse error before "strspn"
/usr/include/string.h:230: error: parse error before "strlen"
/usr/include/string.h:248: error: parse error before "size_t"
/usr/include/string.h:253: error: parse error before "size_t"
/usr/include/string.h:257: error: parse error before "size_t"
/usr/include/string.h:260: error: parse error before "size_t"
/usr/include/string.h:263: error: parse error before "size_t"
/usr/include/string.h:291: error: parse error before "size_t"
In file included from /usr/include/sys/uio.h:29,
from /usr/include/sys/socket.h:27,
from /usr/include/netinet/in.h:24,
from /usr/include/netdb.h:28,
from main.c:9:
/usr/include/bits/uio.h:45: error: parse error before "size_t"
In file included from /usr/include/sys/socket.h:35,
from /usr/include/netinet/in.h:24,
from /usr/include/netdb.h:28,
from main.c:9:
/usr/include/bits/socket.h:221: error: parse error before "size_t"
/usr/include/bits/socket.h:224: error: parse error before "msg_controllen"
/usr/include/bits/socket.h:227: error: parse error before '}' token
/usr/include/bits/socket.h:232: error: parse error before "size_t"
/usr/include/bits/socket.h:239: error: parse error before '}' token
In file included from /usr/include/netinet/in.h:24,
from /usr/include/netdb.h:28,
from main.c:9:
/usr/include/sys/socket.h:136: error: parse error before "size_t"
/usr/include/sys/socket.h:143: error: parse error before "size_t"
/usr/include/sys/socket.h:150: error: parse error before "size_t"
/usr/include/sys/socket.h:161: error: parse error before "size_t"
In file included from /usr/include/netdb.h:33,
from main.c:9:
/usr/include/rpc/netdb.h:61: error: parse error before "size_t"
/usr/include/rpc/netdb.h:65: error: parse error before "size_t"
/usr/include/rpc/netdb.h:69: error: parse error before "size_t"
In file included from main.c:9:
/usr/include/netdb.h:162: error: parse error before "size_t"
/usr/include/netdb.h:169: error: parse error before "size_t"
/usr/include/netdb.h:175: error: parse error before "size_t"
/usr/include/netdb.h:181: error: parse error before "size_t"
/usr/include/netdb.h:232: error: parse error before "size_t"
/usr/include/netdb.h:238: error: parse error before "size_t"
/usr/include/netdb.h:244: error: parse error before "size_t"
/usr/include/netdb.h:304: error: parse error before "size_t"
/usr/include/netdb.h:310: error: parse error before "size_t"
/usr/include/netdb.h:315: error: parse error before "size_t"
/usr/include/netdb.h:370: error: parse error before "size_t"
/usr/include/netdb.h:375: error: parse error before "size_t"
/usr/include/netdb.h:380: error: parse error before "size_t"
/usr/include/netdb.h:430: error: parse error before "size_t"
/usr/include/gconv.h:176: warning: array__data' assumed to have one element /usr/include/bits/socket.h:237: warning: array
__cmsg_data' assumed to have one elementIch weiss mir nicht zu helfen ich habe vorher nur unter Windows programmiert und daranne wird es wohl legen hoffe ihr könnt mir helfen
Gruß
-
Sorry,
es muss mir irgendein Fehler unterlaufen seien nun geht es ...Gruß
-
Ich bekomme es noch nicht so ganz hin mit einer vernünftigen Nachrichtenschleife entwerder bekomme ich beim starten den Fehler segmentation fault oder das Program startet und mach keine Ausgabe mehr :
test:/home/c++ # ./client
test:/home/c++ #
...... while(sockfd != -1) { // std::cout << "sockfd -1" << std::endl; FD_ZERO(&fdSetRead); FD_SET(sockfd, &fdSetRead); while((select(0, &fdSetRead, 0, 0, &timeout)) > 0) { std::cout << "select" << std::endl; if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) { std::cout << "connect" << std::endl ; return 1; } //std::cout << "while(1)" << std::endl ; if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) { std::cout << "recv" << std::endl ; return 1; } buf[numbytes] = '\0'; std::cout << "Recv : " << buf << std::endl ; } } return 0; ...
Was mache ich falsch ich bin ratlos ...
Gruß
-
In dem Buch "C und Linux" findest du ein Beispiel für einen "interaktiven" Server und einen entsprechenden Client - quasi eine Art Chat-Verbindung, bei der man im Client-Programm etwas eintippen kann, was dann zum Server geht und umgekehrt.
Den Quelltext für den Client habe ich mal beigefügt, für mehr Infos solltest du dir das Buch mal ansehen./* connect.c - einfacher Netzwerk-Client */ # include <stdio.h> # include <unistd.h> # include <string.h> # include <sys/types.h> # include <sys/socket.h> # include <netinet/in.h> # include <arpa/inet.h> int main(int argc, char *argv[]) { static char buffer[256]; int sock_fd, err, length, port; struct sockaddr_in server_addr; fd_set input_fdset; if (argc != 3) { fprintf(stderr, "Usage: connect ip-addr port\n"); return(1); } if (sscanf(argv[2], "%d", &port) != 1) { fprintf(stderr, "connect: bad argument '%s'\n", argv[2]); return(1); } sock_fd = socket(PF_INET, SOCK_STREAM, 0); if (sock_fd == -1) { perror("connect: Can't create new socket"); return(1); } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); err = inet_aton(argv[1], &(server_addr.sin_addr)); if (err == 0) { fprintf(stderr, "connect: Bad IP-Address '%s'\n", argv[1]); return(1); } err = connect(sock_fd, &server_addr, sizeof(struct sockaddr_in)); if (err == -1) { perror("connect: connect() failed"); return(1); } while (1) { FD_ZERO(&input_fdset); FD_SET(STDIN_FILENO, &input_fdset); FD_SET(sock_fd, &input_fdset); if (select(sock_fd+1, &input_fdset, NULL, NULL, NULL) == -1) perror("connect: select() failed"); if (FD_ISSET(STDIN_FILENO, &input_fdset)) { if (fgets(buffer, 256, stdin) == NULL) { printf("connect: Closing socket.\n"); break; } length = strlen(buffer); send(sock_fd, buffer, length, 0); } else { length = recv(sock_fd, buffer, 256, 0); if (length == 0) { printf("Connection closed by remote host.\n"); break; } write(STDOUT_FILENO, buffer, length); } } close(sock_fd); return(0); }
Damit kannst du z. B. mal einen SMTP-Server kontaktieren.
Martin