enr00
Routinier
Mein Problem ist, dass immer falsche Werte ausgegeben werden, und bei jedem Hostname wird der gleich falsche Wert ausgegeben...
bei localhost müsste ja normalerweise 127.0.0.1 rauskommen??
Der Code:
Output:
bei localhost müsste ja normalerweise 127.0.0.1 rauskommen??
Der Code:
Code:
#include <iostream>
#include <string>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <cstdlib>
#include <netdb.h>
using namespace std;
void help();
int main(int argc, char *argv[])
{
int sock;
unsigned short port;
char host[255];
unsigned long addr;
struct sockaddr_in server;
struct hostent *host_info;
cout << "argc= " << argc << endl;
if(argc == 1)
{
cout << "Please enter host:";
cin >> host;
cout << "Plese enter port(Default=51234):";
cin >> port;
}
if(argc == 2)
{
if(!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))
help();
strcpy(host, argv[1]);
cout << "Please enter port(Default=51234):";
cin >> port;
}
if(argc == 3)
{
strcpy(host, argv[1]);
port = atoi(argv[2]);
}
sock = socket(PF_INET, SOCK_STREAM, 0);
server.sin_family = AF_INET;
server.sin_port = htons(port);
host_info = gethostbyname(host);
if(host_info == NULL)
{
cout << "Couldn 't resolve host name" << endl;
exit(1);
}
memcpy(&addr, &host_info->h_addr, sizeof(addr));
addr = ntohl(addr);
memcpy(&server.sin_addr, &addr, sizeof(addr));
cout << "Punktnotation: " << inet_ntoa(server.sin_addr) << endl;
return 0;
}
void help()
{
cout << "This help will be extended..." << endl;
exit(1);
}
Output:
Code:
antr4xx@sidux:~/coding/c$ g++ -o admin admin.cpp
antr4xx@sidux:~/coding/c$ ./admin localhost 80
argc= 3
Punktnotation: 8.4.176.8
antr4xx@sidux:~/coding/c$ ./admin 127.0.0.1 80
argc= 3
Punktnotation: 8.4.176.8
antr4xx@sidux:~/coding/c$ ./admin 127.0.0.5 80
argc= 3
Punktnotation: 8.4.176.8
antr4xx@sidux:~/coding/c$