Problem with gethostbyname - can't find any!

J

jonashn

I have the following visual c++ code. It's taken from Beej's guide to
network programming, and modified a little foruse with winsock. But
gethostbyname just doesn't work, not for localhost nor any other ala
http://google.com
CODE:

#include "stdafx.h"
#include <winsock.h>
#include <iostream>
#define BACKLOG 1
#define MYPORT 18999
#define PORT 18999 // the port client will be connecting to
#define MAXDATASIZE 100 // max number of bytes we can get at once


class WSAInitializer // Winsock Initializer
{
public:
WSAInitializer() {
if (WSAStartup(0x101,&m_wsadata))
{
exit(-1);
}
}
~WSAInitializer() {
WSACleanup();
}
private:
WSADATA m_wsadata;
};



int _tmain(int argc, _TCHAR* argv[])
{
WSAInitializer* WSAINIT=new WSAInitializer;
SOCKET sockfd, numbytes;
char buf[MAXDATASIZE];
struct hostent *he;
struct sockaddr_in their_addr; // connector's address information

if (argc != 2) {
fprintf(stderr,"usage: client hostname\n");
exit(1);
}

if ((he=gethostbyname((char*)argv[1])) == NULL) { // get the host
info
std::cout<<WSAGetLastError();
perror("gethostbyname");
exit(1);
}

if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}

their_addr.sin_family = AF_INET; // host byte order
their_addr.sin_port = htons(PORT); // short, network byte order
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero);

if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof
their_addr) == -1) {
perror("connect");
exit(1);
}

if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
perror("recv");
exit(1);
}

buf[numbytes] = '\0';

printf("Received: %s",buf);

closesocket(sockfd);

return 0;

}

Do you see any problems with the above code? I'm nearly 100% sure the
error isn't caused by my local machine.

When running it like client.exe localhost it gives the Winsock error
code 11001 aka host not found.

Any suggestions?
 
V

Victor Bazarov

jonashn said:
I have the following visual c++ code. It's taken from Beej's guide to
network programming, and modified a little foruse with winsock. But
gethostbyname just doesn't work, not for localhost nor any other ala
http://google.com
CODE:

#include "stdafx.h"
#include <winsock.h>
#include <iostream>
[..]

Do you see any problems with the above code?

You mean, beyond the fact that it's non-standard C++?
I'm nearly 100% sure the
error isn't caused by my local machine.

Then it's caused by something else.
When running it like client.exe localhost it gives the Winsock error
code 11001 aka host not found.

Any suggestions?

Post to the newsgroup where Winsock is on topic, like the Windows
programming newsgroup, there are several. The FAQ contains the list
of the proposed ones.

V
 
J

jonashn

jonashn said:
I have the following visual c++ code. It's taken from Beej's guide to
network programming, and modified a little foruse with winsock. But
gethostbyname just doesn't work, not for localhost nor any other ala
http://google.com
CODE:
#include "stdafx.h"
#include <winsock.h>
#include <iostream>
[..]
Do you see any problems with the above code?

You mean, beyond the fact that it's non-standard C++?

Yes, and actually a started using standard C++ and WxWidgets, and
would at any time prefer gcc and standard C. I just coudn't get WxW to
work, and since this is part of a school project which has to be
finished fast, i had to switch and ended up by choosing VCE.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top