socket() blockt Programm
-
Hey,
Ich habe mir eine kleine Klasse geschrieben mit der ich Packete senden bzw. erhalten kann. Jedoch bleibt mein Programm beim Aufruf von socket() einfach stehen. Ich weiß nicht was ich falsch gemacht habe, wäre über jede Antwort erfreut
CNetwork.h
#pragma once #include <WinSock2.h> #include <Windows.h> class CNetwork { public: virtual void initWinSocks() = 0; virtual void sendPacket(char *szPacket, size_t bufferSize) = 0; virtual void recvPacket(char **szPacket, size_t bufferSize) = 0; virtual void cleanWinSocks() = 0; };
CNetworkTCP.h
#pragma once #include "CNetwork.h" #include <WinSock2.h> #include <Windows.h> class CNetworkTCP : public CNetwork { public: //Constructor & Deconstructor CNetworkTCP(); ~CNetworkTCP(); void initWinSocks(); void sendPacket(char *szPacket, size_t bufferSize); void recvPacket(char **szPacket, size_t bufferSize); void cleanWinSocks(); //TCP void bindSocketOnAddress(u_short hostshort, unsigned long addr); void waitAndAcceptConnection(UINT maxConnections); private: SOCKET m_sAcceptSocket; SOCKET m_sConnectedSocket; WSADATA m_wsaData; };
CNetworkTCP.cpp
#include "CNetworkTCP.h" #include <WinSock2.h> #include <Windows.h> #include <string> #include <iostream> #pragma comment(lib, "ws2_32.lib") /************************************************************************/ /* Construcotr & Deconstructor */ /************************************************************************/ CNetworkTCP::CNetworkTCP() { m_sAcceptSocket = 0; m_sConnectedSocket = 0; } CNetworkTCP::~CNetworkTCP() { } /************************************************************************/ /* Standart Winsocks */ /************************************************************************/ void CNetworkTCP::initWinSocks() { if(WSAStartup(MAKEWORD(2, 0), &m_wsaData) != 0) throw std::runtime_error("WSAStartup failed"); } void CNetworkTCP::sendPacket(char *szPacket, size_t bufferSize) { if(send(m_sConnectedSocket, szPacket, bufferSize, 0) != bufferSize) throw std::runtime_error("can't send the full packet"); } void CNetworkTCP::recvPacket(char **szPacket, size_t bufferSize) { if(recv(m_sConnectedSocket, *szPacket, bufferSize, 0) == -1) throw std::runtime_error("Disconnected by Client"); } void CNetworkTCP::cleanWinSocks() { closesocket(m_sAcceptSocket); closesocket(m_sConnectedSocket); WSACleanup(); } /************************************************************************/ /*TCP */ /************************************************************************/ void CNetworkTCP::bindSocketOnAddress(u_short hostshort, unsigned long addr) { SOCKADDR_IN inAddr; //Create socket m_sAcceptSocket = socket(AF_INET, SOCK_STREAM, 0); if(m_sAcceptSocket == INVALID_SOCKET) throw std::runtime_error("Failed to create acceptSocket"); memset(&inAddr, 0, sizeof(SOCKADDR_IN)); inAddr.sin_family = AF_INET; inAddr.sin_port = hostshort; inAddr.sin_addr.s_addr = addr; if(bind(m_sAcceptSocket, (SOCKADDR*)&inAddr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) throw std::runtime_error("Failed to bind acceptsocket on address"); } void CNetworkTCP::waitAndAcceptConnection(UINT maxConnections) { if(listen(m_sAcceptSocket, maxConnections) == SOCKET_ERROR) throw std::runtime_error("Failed to listen socket"); m_sConnectedSocket = accept(m_sAcceptSocket, NULL, NULL); if(m_sConnectedSocket == INVALID_SOCKET) throw std::runtime_error("failed to accept socket"); }
main.cpp
#include "CNetworkTCP.h" #include <Windows.h> #include <iostream> //Global variables int main() { CNetworkTCP TCPnetwork; TCPnetwork.initWinSocks(); TCPnetwork.bindSocketOnAddress(htons(28002), inet_addr("127.0.0.1")); //bis hierhin kommt es gar nicht TCPnetwork.waitAndAcceptConnection(10); std::cin.get(); }
-
Also ich konnte deinem Text nicht entnehmen bis wohin es nun läuft. Ich vermute mal du meinst die Stelle, die du im Quellcode makiert hast.
Also bei mir klappt das super. Der läuft bis TCPnetwork.waitAndAcceptConnection(10); durch und wartet dann auf Verbindungen, was ja korrekt ist.
-
Dankeschön
Ich versuch jetzt einfach mal ein neues Projekt zu erstellen