Hi everyone ! I'm trying to make a console chat application but I have a problem. I tried the program with someone and that person managed to receive the "Connected !" message, but I didn't. We both use Linksys routers and have set the proper parameters to connect to each other. I gave him the correct IP and I'm using the port #1234 for my program. Finally, we both are using Windows XP. Using the following code, why don't I (the listener) receive the "Connected !" message ?Code:#include <winsock2.h> #include <windows.h> #include <iostream> #include <string> #pragma comment(lib, "ws2_32.lib") #define DEFAULT_PORT 1234 #define BUFFER_SIZE 255 #define PEER_DISCONNECTED 0 SOCKET ConnectionSocket = 0; bool Connected = false; // This function can only be used on recv() and send(). inline bool Success(int ret_value) { return !((ret_value == SOCKET_ERROR) || (ret_value == PEER_DISCONNECTED)); } DWORD WINAPI ListeningProc(LPVOID params) { sockaddr_in sin; ZeroMemory(&sin, sizeof(sin)); sin.sin_addr.s_addr = INADDR_ANY; sin.sin_family = AF_INET; sin.sin_port = htons(DEFAULT_PORT); SOCKET s = socket(AF_INET, SOCK_STREAM, 0); if(s != INVALID_SOCKET) { if(bind(s, (sockaddr*)&sin, sizeof(sin)) != SOCKET_ERROR) { listen(s, 10); int buf = 0; ConnectionSocket = accept(s, (sockaddr*)&sin, &buf); if(ConnectionSocket != INVALID_SOCKET) { std::cout << "Connected !"; Connected = true; } } } return 0; } DWORD WINAPI ReceivingProc(LPVOID params) { char Buffer[BUFFER_SIZE]; unsigned int ByteNb = 0; unsigned int Temp = 0; while(Connected == true) { // Receive the number of bytes and then receive the message itself. if(Success(recv(ConnectionSocket, (char*)&Buffer, BUFFER_SIZE, 0))) { if(strcmp(Buffer, "") == 0) { break; } ByteNb = atoi(Buffer) * sizeof(char); std::cout << "\nAway: "; while(ByteNb > 0) { ZeroMemory(Buffer, sizeof(Buffer)); Temp = recv(ConnectionSocket, (char*)&Buffer, BUFFER_SIZE, 0); if(Success(Temp)) { std::cout << Buffer; ByteNb -= Temp; } else if(Temp == PEER_DISCONNECTED) { Connected = false; std::cout << "Peer disconnected..."; break; } std::cout << std::endl; } } } return 0; } int main() { std::cout << "Win32 console chat application\n" "[localhost] to connect to yourself.\n" "[quit] to quit at any time.\n\n"; WSADATA WsaData; if(WSAStartup(MAKEWORD(2,2), &WsaData) != SOCKET_ERROR) { HANDLE ListeningThread = CreateThread(0, 0, ListeningProc, 0, 0, 0); unsigned long IP = 0; std::string DistantIP = ""; while(Connected == false) { std::cout << "Please enter distant computer's IP: "; std::getline(std::cin, DistantIP); if(DistantIP == "[quit]") { TerminateThread(ListeningThread, 0); break; } IP = inet_addr((DistantIP == "[localhost]") ? "127.0.0.1" : DistantIP.c_str()); if(IP != INADDR_NONE ) { sockaddr_in sin; ZeroMemory(&sin, sizeof(sin)); sin.sin_addr.s_addr = IP; sin.sin_family = AF_INET; sin.sin_port = htons(DEFAULT_PORT); SOCKET s = socket(AF_INET, SOCK_STREAM, 0); if(connect(s, (sockaddr*)&sin, sizeof(sin)) != SOCKET_ERROR) { std::cout << "Connected !"; Connected = true; ConnectionSocket = s; closesocket(s); TerminateThread(ListeningThread, 0); } else { std::cout << "Failed to connect..." << std::endl; } } } if(Connected == true) { std::string Message; while(Connected == true) { break; } closesocket(ConnectionSocket); } WSACleanup(); } std::cout << "Adios amigos"; std::cin.get(); return 0; }



LinkBack URL
About LinkBacks


