| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: gethostbyname() wie verwenden? oO im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo, ich habe es grade eilig. Kann mir jemand schnell sagen,w ie man gethostbyname() aus winsock2.h verwendet? Weil das ...
![]() |
| | #1 (permalink) |
| Registriert seit: 08.12.06 ![]() Likes: 0 | Anzeige Hallo, ich habe es grade eilig. Kann mir jemand schnell sagen,w ie man gethostbyname() aus winsock2.h verwendet? Weil das hier geht wirklich nicht: // --- Socket an einen Host verbinden. sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(80); addr.sin_addr.s_addr = inet_addr(gethostbyname("www.google.de")); danke.. /* edit * sry versehentlich ip eingegeben als argument |
| | |
| | #2 (permalink) |
| soweit ich mich erinnere, reicht Code: addr.sin_addr.s_addr = inet_addr("80.67.17.129"); | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Themenstarter Registriert seit: 08.12.06 ![]() Likes: 0 | Ich wil eigentlich das man sowohl Hostip als auch Hostnamen eingeben kann zum verbinden... Ich bekomme es nicht hin, das hier umzusetzen: Code: #include <windows.h>
#include <fstream>
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
string cc_escape (string in) {
struct map_t {
char cOld;
char* sNew;
};
const map_t MAP[8] = {
{'"', "%22" },
{'%', "%25" },
{'&', "%26" },
{'?', "%3F" },
{'=', "%3D" },
{' ', "%20" },
{'<', "%3C" },
{'>', "%3E" }
};
string ret;
size_t nLen = in.length ();
for (size_t i = 0; i < nLen; ++i) {
char c = in[i];
bool bFound = false;
for (int j = 0; j < 8; ++j)
if (c == MAP[j].cOld) {
ret += MAP[j].sNew;
bFound = true;
break;
}
if (!bFound)
ret += c;
}
return ret;
}
char* get_host_ip (char* host) {
// Soll die IP des Hosts zurückgeben, ob das Argument der
// Name des Hosts ist oder sdie IP selber...
// Existiert kein Host mit dem eingegebenen Namen/eingegebener IP, 0 zurückgeben...
}
int startWinsock (void);
int main (unsigned short argc, char* argv[]) {
long rc = startWinsock();
if (rc != 0) {
printf ("Winsock konnte nicht gestartet werden -> %d\n", rc);
} else {
printf ("Winsock gestartet!\n");
// --- Socket erstellen.
int s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET) {
printf ("Fehler: Socket konnte nicht erstellt werden -> %d\n", WSAGetLastError());
} else {
printf ("Socket erstellt!\n");
// --- Abfragen, zu welchem host verbinden.
char host[30];
printf ("Host> ");
scanf ("%s", host);
// --- Socket an einen Host verbinden.
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.s_addr = inet_addr(host);
// --- Prüfen, ob Host existiert.
if (addr.sin_addr.s_addr == 0) {
printf ("Konnte Host nicht finden!");
} else {
rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
if (rc == -1) {
printf ("Konnte nicht zum Server verbinden!\n");
} else {
printf ("Verbunden!\n");
// --- Request an Host.
string pst = "test=hallo";
string req = "";
req += "POST /tell.php HTTP/1.0\r\n";
req += "Host: "+host+"\r\n";
req += "Content-Type: application/x-www-form-urlencoded\r\n";
req += "Content-Length: ";
req += pst.length();
req += "\r\n\r\n";
req += pst;
if (!send(s, req.c_str(), req.length(), 0)) {
printf ("Request konnte nicht gesendet werden!\n");
} else {
cout << endl << "--- --- REQ --- ---" << endl << req << endl << "--- --- --- --- ---" << endl << endl;
}
}
}
}
}
system ("PAUSE");
return 0;
}
int startWinsock (void) {
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0),&wsa);
} |
| | |
| | #4 (permalink) |
| Guest Likes: | Guck mal das an...da haste auch den Fall das da unterschieden wird ob hostname oder ip: http://www.c-worker.ch/tuts/resolv.php#hostname |
|
| | #5 (permalink) | |
| Themenstarter Registriert seit: 08.12.06 ![]() Likes: 0 | ok, habs gelesen und folgendermaßen hinbekommen. Code: #include <windows.h>
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
int startWinsock (void);
long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr);
int main (unsigned short argc, char* argv[]) {
long rc = startWinsock();
if (rc != 0) {
printf ("Winsock konnte nicht gestartet werden -> %d\n", rc);
return 1;
}
printf ("Winsock gestartet!\n");
// --- Socket erstellen.
int s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET) {
printf ("Fehler: Socket konnte nicht erstellt werden -> %d\n", WSAGetLastError());
} else {
printf ("Socket erstellt!\n");
// --- Abfragen, zu welchem host verbinden.
char host[30];
printf ("Host> ");
scanf ("%s", host);
// --- Socket an einen Host verbinden.
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
rc = getAddrFromString(host, &addr);
if (rc == SOCKET_ERROR) {
printf ("IP für %s konnte nicht aufgeloest werden\n", host);
return 1;
}
printf ("IP aufgeloest!\n");
// --- Prüfen, ob Host existiert.
rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
if (rc == -1) {
printf ("Konnte nicht zum Server verbinden!\n");
return 1;
}
printf ("Verbunden!\n");
// --- Request an Host.
string pst = "test=hallo";
string req = "";
req += "POST /index.php HTTP/1.0\r\n";
req += "Host: "; req += host; req += "\r\n";
req += "Content-Type: application/x-www-form-urlencoded\r\n";
req += "Content-Length: "; req += pst.length(); req += "\r\n\r\n";
req += pst;
if (!send(s, req.c_str(), req.length(), 0)) {
printf ("Request konnte nicht gesendet werden!\n");
return 1;
}
cout << endl << "--- --- REQ --- ---" << endl << req << endl << "--- --- --- --- ---" << endl << endl;
}
system ("PAUSE");
return 0;
}
int startWinsock (void) {
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0),&wsa);
}
long getAddrFromString (char* hostnameOrIp, SOCKADDR_IN* addr) {
long rc;
unsigned long ip;
HOSTENT* he;
/* Parameter prüfen */
if (hostnameOrIp==NULL || addr==NULL)
return SOCKET_ERROR;
/* eine IP in hostnameOrIp ? */
ip = inet_addr(hostnameOrIp);
/* bei einem fehler liefert inet_addr den Rückgabewert INADDR_NONE */
if(ip != INADDR_NONE) {
addr->sin_addr.s_addr=ip;
return 0;
} else {
/* Hostname in hostnameOrIp auflösen */
he = gethostbyname(hostnameOrIp);
if (he == NULL) {
return SOCKET_ERROR;
} else {
/*die 4 Bytes der IP von he nach addr kopieren */
memcpy(&(addr->sin_addr),he->h_addr_list[0],4);
}
return 0;
}
} das Ergebnis: Zitat:
| |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [VB.NET] Winsocks verwenden | Henni | Code Kitchen | 10 | 24.05.07 15:16 |
| "Als Hintergrund verwenden" is weg | iLLusion X | Die Problemzone | 4 | 28.11.06 18:42 |
| gethostbyname ärgert. (c++) | Morgenroete | Code Kitchen | 0 | 01.06.06 11:23 |
| C++: unrar.dll verwenden | mido | Code Kitchen | 3 | 26.11.05 21:58 |
| Sonderzeichen in C++ verwenden... | PeaceTreaty | Code Kitchen | 13 | 02.05.02 13:00 |