Netzwerk lib verbindet nicht



  • Habe eine kleine netlib für Linux geschrieben leider bekomme ich keine verbindung zu stande, socket legt er an sagt dann aber verbindung fehlgeschlagen.

    edit: das verbinden klappt jetzt nur werden irgendwie keine Daten empfangen

    s_netpp.cpp

    #include <iostream>
    #include <vector>
    #include <string>
    #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 <easyc.h>
    #include "../netpp.h"
    
    using namespace std;
    using namespace easyc;
    
    //Global Variables
    struct sockaddr_in s_address;
    socklen_t addrlen; 
    int server_client_socket;
    int server_socket;
    
    //get a port from host
    bool netserver::getsocket()
    {
      if((server_socket=socket(AF_INET, SOCK_STREAM, 0)) >0)
        {
          cout << "Socket wurde angelegt" <<endl;
          return 0;
        }
      else
        {
          return 1;
        }
    
    }
    
    bool netserver::getport(int port)
    {
      const int y = 1;
      setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &y,sizeof(int));
      s_address.sin_family = AF_INET;
      s_address.sin_addr.s_addr = INADDR_ANY;
      s_address.sin_port = htons(port);
    
      if (bind (server_socket,(struct sockaddr *) &s_address, sizeof (s_address)) !=0)
      {
          cout << "Port Belegt" << endl;
          return 1;
      }
      else
      listen (server_socket, 5);
      addrlen = sizeof (struct sockaddr_in);
      return 0; 
    }
    
    //waiting for client connection
    bool netserver::serverlisten()
    {
      while(1){
        server_client_socket = accept (server_socket, (struct sockaddr *) &s_address, &addrlen); 
        if (server_client_socket > 0)
          {
            cout << "Client verbunden" << endl;
            return 0;
          }
      }
    }
    
    //send signal when server ready to recieve data
    bool netserver::netsend(string data)
    {
      send(server_client_socket,stringtoconstchar(data),strlen(stringtoconstchar(data)),0 );
      return 0;
    }
    
    //get packages and pushed it into a vector
    string netserver::netget(const int BUF)
    {
      int bytes;
      char temp[BUF];
      bytes = recv(server_client_socket,temp,BUF,0);
      if (bytes == -1)
        {
          perror("recv() in get_banner() failed");
          return "error";
        }
      return temp;
    }
    
    //close network connection
    void netserver::closeconnect()
    {
      close (server_client_socket);
    }
    

    c_netpp.cpp

    /*
    Writen by Jan Koster release under lgpl
    
    */
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <iostream>
    #include <vector>
    #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 <easyc.h>
    #include "../netpp.h"
    
    using namespace std;
    using namespace easyc;
    
    //Global Variables
    int client_socket;
    
    bool netclient::netconnect(std::string ipadr,int port)
    {
      struct sockaddr_in c_address;
    
      if ((client_socket=socket (AF_INET, SOCK_STREAM,0)) > 0)
        {
          cout << "Socket Angelegt" << endl;
          c_address.sin_family= AF_INET;
          c_address.sin_port = htons(port);
        }
      else
      {  
        cout << "Socket konnte nicht Angelegt Werden" <<endl;
        return 1;
      }
    
        inet_aton ((stringtoconstchar(ipadr)), &c_address.sin_addr);
        if (connect (client_socket, (struct sockaddr *) &c_address, sizeof (c_address)) == 0)
        {
          cout << "Verbindung Hergestellt" << inet_ntoa(c_address.sin_addr) << endl;
          return 0;
        }
        else
        {
          cout <<"Verbindung Fehlgeschlagen"<< endl;
          return 1;
        }
    }
    
    bool netclient::netsend(std::string data)
    {
      send(client_socket,(stringtoconstchar(data)),strlen(stringtoconstchar(data)),0 );
      return 0;
    }
    
    string netclient::netget(const int BUF)
    {
      int bytes;
      char temp[BUF];
      bytes = recv(client_socket,temp,sizeof(temp)-1,0);
      if (bytes == -1)
        {
        perror("recv() in get_banner() failed");
        return "error";
        }
      return temp;
    }
    
    void netclient::netend()
    {
      close (client_socket);
    }
    

    netpp.h

    /*
    Writen by Jan Koster release under lgpl
    
    */
    #ifndef NETPP_H_
    #define NETPP_H_
    
    class netserver
    {
      public:
        bool getsocket();
        bool getport(int port);
        bool serverlisten();
        std::string netget(const int BUF);
        bool netsend(std::string data);
        void closeconnect();
    }; 
    
    class netclient
    {
      public:
        bool create_connect();
        bool netconnect(std::string ipadr,int port);
        bool netsend(std::string data);
        std::string netget(const int BUF);
        void netend();
    }; 
    #endif
    


  • edit: habe abhängigkeit zur easyclib entfernt ohne erfolg

    s_netpp.cpp

    #include <iostream>
    #include <vector>
    #include <string>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include "../netpp.h"
    
    using namespace std;
    
    //Global Variables
    struct sockaddr_in s_address;
    socklen_t addrlen; 
    int server_client_socket;
    int server_socket;
    
    //get a port from host
    bool netserver::getsocket()
    {
      if((server_socket=socket(AF_INET, SOCK_STREAM, 0)) >0)
        {
          cout << "Socket wurde angelegt" <<endl;
          return 0;
        }
      else
        {
          return 1;
        }
    
    }
    
    bool netserver::getport(int port)
    {
      const int y = 1;
      setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &y,sizeof(int));
      s_address.sin_family = AF_INET;
      s_address.sin_addr.s_addr = INADDR_ANY;
      s_address.sin_port = htons(port);
    
      if (bind (server_socket,(struct sockaddr *) &s_address, sizeof (s_address)) !=0)
      {
          cout << "Port Belegt" << endl;
          return 1;
      }
      else
      listen (server_socket, 5);
      addrlen = sizeof (struct sockaddr_in);
      return 0; 
    }
    
    //waiting for client connection
    bool netserver::serverlisten()
    {
      while(1){
        server_client_socket = accept (server_socket, (struct sockaddr *) &s_address, &addrlen); 
        if (server_client_socket > 0)
          {
            cout << "Client verbunden" << endl;
            return 0;
          }
      }
    }
    
    //send signal when server ready to recieve data
    bool netserver::netsend(string data)
    {
      send(server_client_socket,data.c_str(),data.size(),0 );
      return 0;
    }
    
    //get packages
    string netserver::netget(const int BUF)
    {
      string *buffer=new string[BUF];
      recv(server_client_socket,buffer,BUF,0);
      return *buffer;
    }
    
    //close network connection
    void netserver::closeconnect()
    {
      close (server_client_socket);
    }
    

    c_netpp.cpp

    /*
    Writen by Jan Koster release under lgpl
    
    */
    #include <iostream>
    #include <string>
    #include <vector>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    
    #include "../netpp.h"
    
    using namespace std;
    
    //Global Variables
    int client_socket;
    
    bool netclient::netconnect(std::string ipadr,int port)
    {
      struct sockaddr_in c_address;
    
      if ((client_socket=socket (AF_INET, SOCK_STREAM,0)) > 0)
        {
          cout << "Socket Angelegt" << endl;
          c_address.sin_family= AF_INET;
          c_address.sin_port = htons(port);
        }
      else
      {  
        cout << "Socket konnte nicht Angelegt Werden" <<endl;
        return 1;
      }
    
        inet_aton (ipadr.c_str(), &c_address.sin_addr);
        if (connect (client_socket, (struct sockaddr *) &c_address, sizeof (c_address)) == 0)
        {
          cout << "Verbindung Hergestellt" << inet_ntoa(c_address.sin_addr) << endl;
          return 0;
        }
        else
        {
          cout <<"Verbindung Fehlgeschlagen"<< endl;
          return 1;
        }
    }
    
    bool netclient::netsend(std::string data)
    {
      send(client_socket,data.c_str(),data.size(),0 );
      return 0;
    }
    
    string netclient::netget(const int BUF)
    {
      string *buffer=new string[BUF];
      recv(client_socket,buffer,BUF,0);
      return *buffer;
    }
    
    void netclient::netend()
    {
      close (client_socket);
    }
    

    netpp.h

    /*
    Writen by Jan Koster release under lgpl
    
    */
    #ifndef NETPP_H_
    #define NETPP_H_
    
    class netserver
    {
      public:
        bool getsocket();
        bool getport(int port);
        bool serverlisten();
        std::string netget(const int BUF);
        bool netsend(std::string data);
        void closeconnect();
    }; 
    
    class netclient
    {
      public:
        bool create_connect();
        bool netconnect(std::string ipadr,int port);
        bool netsend(std::string data);
        std::string netget(const int BUF);
        void netend();
    }; 
    
    #endif
    

Anmelden zum Antworten