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?
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?