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