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 😉


Anmelden zum Antworten