Hallo allemaal
Ik ben nogal nieuw met het programmeren van netwerk applicaties, dus vandaar dat ik hier probeer om hulp te vinden. Ik wil een applicatie maken die checkt of een URL nog wel bestaat of niet. Hiervoor moet ik een connectie maken met de server, een vervolgens een HTTP request sturen.
Tot nu toe heb ik het volgende:
Nogal een lap code. Maar ik kan met zekerheid zeggen dat het tot en met regel 53 allemaal goed gaat, ik vang namelijk over mogelijke errors af maar die zijn er tot die regel nog niet. Ook krijg ik van gethostbyname het goeie IP adres terug.
Het probleem is dus dat mijn connect (regel 56) functie niet werkt. Als deze functie wordt uitgevoerd, dan krijg ik altijd na +/- 30 seconden een timeout (error code 10060), terwijl ik zeker weet dat ik een goed IP-adres heb.
Wat is er mis met mijn code?
Ik ben nogal nieuw met het programmeren van netwerk applicaties, dus vandaar dat ik hier probeer om hulp te vinden. Ik wil een applicatie maken die checkt of een URL nog wel bestaat of niet. Hiervoor moet ik een connectie maken met de server, een vervolgens een HTTP request sturen.
Tot nu toe heb ik het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| //---------------------------------------------------------------------------
#include <vcl>
#include <winsock>
#include <iostream>
#pragma hdrstop
//---------------------------------------------------------------------------
using namespace std;
void initWinSock(WSADATA&);
#pragma argsused
int main(int argc, char* argv[])
{
WSADATA WSAData;
HOSTENT* hp;
SOCKADDR_IN ServerInfo;
IN_ADDR ServerIPAddr;
initWinSock(WSAData);
char* serverName = "www.looze.net";
hp = gethostbyname(serverName);
/* als de URL niet bestaat */
if(hp == 0) {
cout << serverName << " is an invalid or non-existant hostname." << endl;
cin.get();
return 0;
}
/*loop door alle IP-adressen heen */
for(int i = 0; hp->h_addr_list[i] != 0; ++i) {
memcpy(&ServerIPAddr, hp->h_addr_list[i], sizeof(struct in_addr));
cout << "IP-Address: " << inet_ntoa(ServerIPAddr) << endl;
}
/*Initialiseer de socket*/
SOCKET theSocket;
theSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(theSocket == INVALID_SOCKET) {
cout << "Error creating socket: Error " << WSAGetLastError() << endl;
WSACleanup();
cin.get();
return 0;
}
/*Geef ServerInfo alle info die nodig is om te connecten*/
ServerInfo.sin_family = AF_INET;
ServerInfo.sin_addr = ServerIPAddr;
ServerInfo.sin_port = htons(80);
/*connect*/
if(connect( theSocket, (SOCKADDR*) &ServerInfo, sizeof(ServerInfo) ) == SOCKET_ERROR) {
cout << "Failed to connect: Error " << WSAGetLastError() << " (timeout)";
WSACleanup();
cin.get();
return 0;
} else {
cout << "Connection succesfull!";
}
closesocket(theSocket);
WSACleanup();
cin.get();
return 0;
}
//---------------------------------------------------------------------------
void initWinSock(WSADATA& WSAData) {
WORD Version;
Version = MAKEWORD(2,0);
if(WSAStartup(Version, &WSAData) != 0) {
cout << "Error initializing Winsock: Error " << WSAStartup(Version, &WSAData) << endl;
}
} |
Nogal een lap code. Maar ik kan met zekerheid zeggen dat het tot en met regel 53 allemaal goed gaat, ik vang namelijk over mogelijke errors af maar die zijn er tot die regel nog niet. Ook krijg ik van gethostbyname het goeie IP adres terug.
Het probleem is dus dat mijn connect (regel 56) functie niet werkt. Als deze functie wordt uitgevoerd, dan krijg ik altijd na +/- 30 seconden een timeout (error code 10060), terwijl ik zeker weet dat ik een goed IP-adres heb.
Wat is er mis met mijn code?
[ Voor 5% gewijzigd door Verwijderd op 29-09-2004 12:59 ]