Jump to content
  • Advertisement

Gnuttis

Member
  • Content Count

    1
  • Joined

  • Last visited

Community Reputation

122 Neutral

About Gnuttis

  • Rank
    Newbie
  1. Hi, I'm trying to build an application. When it is started it should be possible to start it as a server or a client. It works in tfollowing way(first a server is started and then a client tries to connect) 1) SetupServer is called. Set every thing up for the server. Start listen. 2) When the client tries to connect. FD_ACCEPT event is received in the server. The server calls the AcceptClient(). No error is reported. As I understand, the client should receive the FD_CONNECT event now,but it doesn't. Could someone help me? Please...... (The socket was made non-blocking before connect() was called) ////////////////////////////////////////////////////// // SetupServer() ////////////////////////////////////////////////////// CClientServer::SetupServer(HWND m_hWnd) { ssockVersion = MAKEWORD(1, 1); int error = WSAStartup(ssockVersion, &swsaData); // Next, create the listening socket> listeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (listeningSocket == INVALID_SOCKET) { snret = WSAGetLastError(); WSACleanup(); } // Make the port non-blocking WSAAsyncSelect(listeningSocket,m_hWnd,WM_USER+5,FD _OOB|FD_CLOSE|FD_ACCEPT|FD_READ|FD_WRITE|FD_CONNEC T); // Use a SOCKADDR_IN struct to fill in address information sserverInfo.sin_family = AF_INET; // Since this socket is listening for connections, // any local address will do sserverInfo.sin_addr.s_addr = INADDR_ANY; // Convert integer 5555 to network-byte order // and insert into the port field sserverInfo.sin_port = htons(5555); // Bind the socket to our local server address snret = bind(listeningSocket, (LPSOCKADDR)&sserverInfo, sizeof(struct sockaddr)); if (snret == SOCKET_ERROR) { snret = WSAGetLastError(); WSACleanup(); } snret = listen(listeningSocket, 5); if (snret == SOCKET_ERROR) { snret = WSAGetLastError(); WSACleanup(); } } ////////////////////////////////////////////////////// // AcceptClient() ////////////////////////////////////////////////////// CClientServer::AcceptClient(void) { // A client has connected. int sin_size; sin_size = sizeof(sockaddr_in); int addr_size = sizeof (sockaddr); theClient = accept(listeningSocket, (struct sockaddr *)&their_addr, &sin_size); if (theClient== INVALID_SOCKET) { snret = WSAGetLastError(); WSACleanup(); } } ////////////////////////////////////////////////////// // Method: ConnectToServer() // // Description: ////////////////////////////////////////////////////// CClientServer::ConnectToServer(void) { // Try to connect to server csockVersion = MAKEWORD(1, 1); // Initialize Winsock as before WSAStartup(csockVersion, &cwsaData); // Store information about the server iaHost.s_addr = inet_addr("162.138.0.49"); chostEntry = gethostbyaddr((const char *)&iaHost, sizeof(struct in_addr), AF_INET); if (!chostEntry) { cnret = WSAGetLastError(); WSACleanup(); } // Create the socket ctheSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (ctheSocket == INVALID_SOCKET) { cnret = WSAGetLastError(); WSACleanup(); } // Make the port non-blocking WSAAsyncSelect(ctheSocket,m_hWnd,WM_USER+5,FD_CLOS E|FD_READ|FD_WRITE|FD_CONNECT); // Fill a SOCKADDR_IN struct with address information cserverInfo.sin_family = AF_INET; cserverInfo.sin_addr = *((LPIN_ADDR)*chostEntry->h_addr_list); // Change to network-byte order and // insert into port field cserverInfo.sin_port = htons(5555); // Connect to the server cnret = connect(ctheSocket, (LPSOCKADDR)&cserverInfo, sizeof(struct sockaddr)); if (cnret == SOCKET_ERROR) { cnret = WSAGetLastError(); WSACleanup(); } }
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!