Winsock Problem
Jeg er ved at lave en telnet-klon (bare for sjov :)), men banker hovedet ind i en mur lige nu. Jeg vil bare sende en GET request til min apache web-server, som kører på localhost, men ved recv-funktionen "hænger" programmet fast (blocker). Jeg har haft et netværksovervågningsprogram sat til der fanger alle netværkspackets, og den fanger ikke noget fra mit program, så jeg gætter på at det er i sendingen det går galt. Det underlige er, at funktionen send() faktisk returnerer det korrekte antal bytes (11) som er sendt. Derfor: Kig lige på det og hjæææælp :). Det er en windows-console-application, jeg har også prøvet som windows-application, men det er i selve funktionen initSocket() at det går galt. Jeg skriver pt. til localhost, men har også prøvet med f.eks. google.com, stadig uden heldSource på vej. Husk at inkludere wsock32.lib i projektet for at compile..
/***** Main.cpp - Den eneste fil i projektet *****/
#include "windows.h"
#include <iostream.h>
void debug(char *asd)
{
cout << asd;
}
SOCKET s;
WSADATA wsda; // Information fra WSAStartUpx
struct hostent *host;
char hostname[20], sendline[100], readline[1024];
int sendlinelen, readlinelen; // Længde af strengene
struct sockaddr_in address;;
int initSocket() // result-værdierne er kun til debugging
{
int result;
// strcpy(hostname, "www.google.com");
// strcpy(hostname, "216.239.51.101"); // www.google.com
strcpy(hostname, "127.0.0.1"); // localhost
strcpy(sendline, "GET /1.html"); // Fil i roden af web-serveren
sendlinelen = strlen(sendline);
result = WSAStartup(MAKEWORD(1,1), &wsda); // Init WinSocket.
s = socket(PF_INET,SOCK_DGRAM,0);
if(s == SOCKET_ERROR)
{
result = WSAGetLastError();
debug("fejl 1");
return -1;
}
// Socket ok nu (forhåbentlig :))
address.sin_family = AF_INET; // Internet protocol
address.sin_port = htons(80); // HTTP-port 80
address.sin_addr.s_addr = inet_addr(hostname); // 127.0.0.1
if(address.sin_addr.s_addr == INADDR_NONE) // Hvis f.eks. localhost i stedet for 127.0.0.1. Kode taget fra eksempel.
{
host = NULL;
debug("Finder hostname");
host = gethostbyname(hostname); // Get the IP address of the server
if(host == NULL)
{
debug("Error\nUnknown host.");
return -3;
}
memcpy(&address.sin_addr, host->h_addr_list[0], host->h_length);
debug("host ok!");
}
debug("Socket and adress ok, connecting");
result = connect(s, (struct sockaddr *) &address, sizeof(address)); //Connect
if (result== SOCKET_ERROR)
{
debug("Fejl i connect");
return WSAGetLastError();
}
debug("Connect ok, sender data");
result = send(s, sendline, sendlinelen, 0); // send returnerer antal sendte bytes
if(result == SOCKET_ERROR)
{
return -2;
debug("fejl 2");
}
debug("Sending ok, venter på data");
// HER bliver jeg skuffet... den hænger i næste linie:
readlinelen = recv(s, readline, sizeof(readline), 0);
debug("Data modtaget!!!!!!");
if(readlinelen == SOCKET_ERROR)
{
return -3;
debug("fejl 3");
}
readline[readlinelen] = '\0'; // konverter til null-termineret string
closesocket(s);
WSACleanup();
return 0;
}
int main(char *args)
{
int i;
debug("test the helloing world");
i = initSocket();
return i;
}
/************ Source slut ***********/
MVH Elv
