Hi, so I'm learning socket programming in Windows XP. I'm trying to set up a simple server/client interaction, but I can't seem to get it working. Whenever I run the client, I get a "Socket connect error 10049" message printed to the console (meaning WSAGetLastError() is returning the error number 10049). Error 10049 translates to:
NOTE: The key part of the code that's causing the trouble is at the bottom of the code if you don't want to read all of that.Code:WSAEADDRNOTAVAIL 10049 0x2741 The requested address is not valid in its context.
Here's the code of the client:
And here is the code of the server:Code:#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <cstring> #include <Mstcpip.h> using std::cout; using std::cin; using std::endl; WSADATA wsaData; int main(int argc, char * argv[]) { int wsaReturnVal = WSAStartup(MAKEWORD(1, 1), &wsaData); if (wsaReturnVal) { cout << "Error number: " << wsaReturnVal << endl; exit(1); } char * fpoint = strrchr(argv[0], '\\'); if (argc != 2) { printf("Usage: <%s> <\"string\"|ping>", fpoint+1); exit(1); } struct sockaddr_in serv; SOCKET sockfd; memset(serv.sin_zero, '\0', sizeof(serv.sin_zero)); serv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); serv.sin_family = AF_INET; serv.sin_port = htons(3490); sockfd = socket(PF_INET, SOCK_STREAM, 0); if (sockfd == SOCKET_ERROR) { printf("Socket create error %d", WSAGetLastError()); exit(1); } if (connect(sockfd, (struct sockaddr *)&serv, sizeof(sockaddr_in)) == SOCKET_ERROR) { printf("Socket connect error %d", WSAGetLastError()); exit(1); } printf("Connected to server...\n"); closesocket(sockfd); if (WSACleanup()) { cout << "Cleanup Error." << endl; exit(1); } }
NOTE: The server works perfectly fine (other than the address it prints, instead of printing the address it prints "(null)", but I ran a netstat to ensure the socket was working correctly, and it was infact in listening state on port 3490. However I cannot get the client to connect to it... Ok thanks!Code:#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <cstring> #include <Mstcpip.h> #define MYPORT 3490 #define BACKLOG 10 using std::cout; using std::cin; using std::endl; WSADATA wsaData; int main(int argc, char * argv[]) { int wsaReturnVal = WSAStartup(MAKEWORD(1, 1), &wsaData); if (wsaReturnVal) { cout << "Error number: " << wsaReturnVal << endl; exit(1); } struct sockaddr_in serv, their_addr; SOCKET sockfd, newfd = NULL; memset(&serv, 0, sizeof(serv)); serv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); serv.sin_family = AF_INET; serv.sin_port = htons(MYPORT); if ((sockfd = socket(PF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR) { printf("Socket create error %d", WSAGetLastError()); exit(1); } printf("Socket created...\n"); if (bind(sockfd, (sockaddr *)&serv, sizeof(sockaddr_in)) == SOCKET_ERROR) { printf("Socket bind error %d", WSAGetLastError()); exit(1); } printf("Bound socket to address: %s...\n", serv.sin_addr); if (listen(sockfd, BACKLOG) == -1) { printf("Socket listen error %d", WSAGetLastError()); exit(1); } printf("Listening on socket...\n"); int addr_size = sizeof(their_addr); if ((newfd = accept(sockfd, (struct sockaddr *)&their_addr, &addr_size)) == INVALID_SOCKET) { printf("Accept error %d", WSAGetLastError()); closesocket(newfd); exit(1); } closesocket(sockfd); closesocket(newfd); if (WSACleanup()) { printf("Cleanup Error %d", WSAGetLastError()); exit(1); } }
EDIT: The following code was taken out of the Client program, but this is where the error lies. Somewhere in here... Because the error is printed at that point, so anything before or up to it is the troublesome code:
Code:struct sockaddr_in serv; SOCKET sockfd; memset(serv.sin_zero, '\0', sizeof(serv.sin_zero)); serv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); serv.sin_family = AF_INET; serv.sin_port = htons(3490); sockfd = socket(PF_INET, SOCK_STREAM, 0); if (sockfd == SOCKET_ERROR) { printf("Socket create error %d", WSAGetLastError()); exit(1); } if (connect(sockfd, (struct sockaddr *)&serv, sizeof(sockaddr_in)) == SOCKET_ERROR) { printf("Socket connect error %d", WSAGetLastError()); exit(1); }



LinkBack URL
About LinkBacks


