funzt einfach net
-
moin.....
ich have den server und will nun den client erstellen, doch das geht irgendwie nicht, da der client mit dem server keine verbindung aufnimmt
hier mal der code von server:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <time.h> #define ABFRAGE "time" int echofunk(int s); int zeit(char * buffer); int echofunk(s) { ssize_t bytes; char buffer[150]; char * buff = buffer; memset(buffer, '\0', sizeof(buffer)); memset(&buffer[149],'\n',1); while( (bytes = read(s, buffer, sizeof(buffer))) > 0) { if(strncmp(buffer,ABFRAGE, strlen(ABFRAGE)) == 0) zeit(buff); buffer[bytes] = '\0'; if(write(s, buffer, sizeof(buffer)) != sizeof(buffer)) return -1; memset(buffer,'\0',sizeof(buffer)); memset(&buffer[149],'\n',1); } return 0; } int zeit(char * buffer) { time_t ticks; ticks = time(NULL); sprintf(buffer, "%s", ctime(&ticks)); return 0; } int main(void) { int s, c; size_t addr_len; struct sockaddr_in addr; memset(&addr, '\0',sizeof(addr)); addr.sin_addr.s_addr = INADDR_ANY; addr.sin_family = AF_INET; addr.sin_port = htons(4000); s = socket(AF_INET, SOCK_STREAM, 0); bind(s, (struct sockaddr *)&addr, sizeof(addr)); listen(s, 1); while (1>0) { addr_len = sizeof(addr); c = accept(s, (struct sockaddr *)&addr, &addr_len); if (c == -1) { printf("FEHLER accept\n C=%d",c); exit(-1); } else { echofunk(c); } } }
und hier mal der code vom client:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <time.h> int main() { int s; struct sockaddr_in addr; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_family = AF_INET; addr.sin_port = htons(4000); s = socket(AF_INET, SOCK_STREAM, 0); if (s == -1) { printf("ERROR socket"); } if (connect(s, (struct sockaddr *) &addr, sizeof(addr)) == -1); { printf("ERROR connect"); } }
es wäre wirklich cool wenn ihr mir helfen würdet
-
beim client fehlt das bind()
-
funzt so immer noch net
aber trotzdem danke erstmal für die hilfe
kann es sein, das es net geht weil er irgendwie net den server findet weil der nicht richtig angegeben ist?
-
Der Client hat doch gar keine Daten vom Server. Irgendwie musste man ein GetHostByName() aufrufen, weiß es aber nicht mehr genau, kann dir morgen Bescheid sagen
-
addr.sin_addr.s_addr = INADDR_ANY;
da sollte die Address rein, sonst weiß der Client ja nicht wohin er connecten soll
-
int client_connect(char *host, int port) { struct sockaddr_in sa; struct hostent *he = NULL; int _socket; _socket = socket(AF_INET, SOCK_STREAM, 0); memset(&sa, 0, sizeof(struct sockaddr)); sa.sin_family = AF_INET; sa.sin_port = htons(port); he = gethostbyname(host); if(!he) { if((sa.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE) { return 0; } } else { bcopy(he->h_addr,(struct in_addr *) &sa.sin_addr, he->h_length); } if(connect(_socket,(struct sockaddr *) &sa, sizeof(sa)) < 0) { return 0; } return _socket; }
So machts man