case FD_ACCEPT:
{
//create socket for the client
CSockets ClientSocket;
//add the client socket to the Cons vector to work
//with multiple client.
Cons.push_back(ClientSocket);
//accept the client connection
if (ServerSocket.Accept(Cons.at(i)))
{
SetWindowText(hEditRecv, "**Client Connected**");
}
Cons.at(i).connected = true;
//create a new thread and pass in the ClientSocket
hClientThreadHandle = CreateThread(
NULL,
NULL,
(LPTHREAD_START_ROUTINE) &thrClientThread,
&Cons.at(i),
NULL,
&dwClientID
);
i++;
}break;
CSockets.h
#ifndef _CSockets_H_
#define _CSockets_H_
///////////////////////////////////////////////
//Class to handle all aspects of sockets
////////////////////////////////////////////////
#include <winsock2.h>
#include <stdio.h>
class CSockets
{
private:
int nResult;
public:
SOCKET skSocket;
int iStatus;
bool connected;
//WSADATA wsaData;
CSockets();
~CSockets();
int Bind(int iPort);
bool Initialize();
int Listen( void );
bool Connect (char* szServerAddress, int iPort);
bool Accept (CSockets& skAcceptSocket);
int Recv(char *szBuffer, int iBufLen, int iFlags);
int Send(char *szBuffer, int iBufLen, int iFlags);
};
#endif
CSockets.cpp
#include "CSockets.h"
//constructor
CSockets::CSockets()
{
nResult = 0;
WSADATA wsaData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD(2, 0);
skSocket = INVALID_SOCKET;
iStatus = WSAStartup(wVersionRequested, &wsaData);
}
//deconstructor
CSockets::~CSockets()
{
}
int CSockets::Listen( void )
{
return listen(skSocket, SOMAXCONN);
}
int CSockets::Bind(int iPort)
{
sockaddr_in saServerAddress;
skSocket = socket(AF_INET, SOCK_STREAM, 0);
if(skSocket == INVALID_SOCKET)
{
return false;
}
memset(&saServerAddress, 0, sizeof(sockaddr_in));
saServerAddress.sin_family = AF_INET;
saServerAddress.sin_addr.s_addr = htonl(INADDR_ANY);
saServerAddress.sin_port = htons(iPort);
if( bind(skSocket, (sockaddr*) &saServerAddress, sizeof(sockaddr)) == SOCKET_ERROR)
{
//Disconnect();
return false;
}
else
return true;
}
bool CSockets::Accept(CSockets &skAcceptSocket)
{
sockaddr_in saClientAddress;
int iClientSize = sizeof(sockaddr_in);
SOCKADDR IPAddress;
skAcceptSocket.skSocket = accept( skSocket, (struct sockaddr*)&saClientAddress, &iClientSize );
if( skAcceptSocket.skSocket == INVALID_SOCKET )
{
return false;
}
else
{
return true;
}
}
int CSockets::Send(char *szBuffer, int iBufLen, int iFlags)
{
return send(skSocket, szBuffer, iBufLen, iFlags);
}
int CSockets::Recv(char *szBuffer, int iBufLen, int iFlags)
{
return recv(skSocket, szBuffer, iBufLen, iFlags);
}
bool CSockets::Connect(char* szServerAddress, int iPort)
{
struct sockaddr_in serv_addr;
LPHOSTENT lphost;
memset(&serv_addr,0,sizeof(sockaddr_in));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(szServerAddress);
if (serv_addr.sin_addr.s_addr == INADDR_NONE)
{
lphost = gethostbyname(szServerAddress);
if (lphost != NULL)
serv_addr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
else
{
WSASetLastError(WSAEINVAL);
return FALSE;
}
}
serv_addr.sin_port = htons(iPort);
// Open the socket
skSocket = socket(AF_INET, SOCK_STREAM, 0);
if(skSocket == INVALID_SOCKET)
{
return false;
}
int err = connect(skSocket, (struct sockaddr*)&serv_addr,sizeof(sockaddr));
if(err == SOCKET_ERROR)
{
//Disconnect();
return false;
}
return true;
}

New Topic/Question
Reply




MultiQuote




|