1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
LRESULT CThreadTCP::BoucleTCP(WPARAM wParam,LPARAM lParam)
{
if(m_config)
{
//Chaine de carac en BYTE
char result[200];
//-----------------------
DWORD lp=0; //Argument pour le blocant
m_Tboucle = (CThreadTraitement *)lParam;
//DEBUT DE WINSOCK
WORD wVersionRequested;
wVersionRequested = MAKEWORD( 2, 2 );
WSADATA wsaData;
int wsaret=WSAStartup(wVersionRequested,&wsaData);
if(wsaret && AfxSocketInit(&wsaData))
{
//ERREUR DE WINSOCK
}
else
{
//DEFINITION DES SOCKET PUB et PRIVEE
SOCKET A = socket(AF_INET,SOCK_STREAM,0);
if (A == SOCKET_ERROR)
{
//ERREUR DE SOCKET
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(m_Port);
server.sin_addr.s_addr = INADDR_ANY;
sockaddr sockAddr_DIST;
int p = sizeof(sockAddr_DIST);
if(ioctlsocket(A,FIONBIO,&lp) != SOCKET_ERROR)//to BLOCANT
{
//REACTIVATION DE LA BR A
if (bind(A, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
{
//ERREUR DE BIND
}
if(listen(A,5) == SOCKET_ERROR)
{
//ERREUR DE LISTEN
}
else
{
int test;
char u;
int increm;
while(m_on_tcp)
{
//Accepter la connextion et Création du CV
SOCKET B;
B = accept(A,&sockAddr_DIST,&p);
if(B == SOCKET_ERROR)
{
//ERREUR DE ACCEPT
}
else
{
ioctlsocket(B,FIONBIO,&lp);
m_socketb = true;
while(m_socketb)
{
increm = -1;
test = 0;
t = 'a';
u = 'a';
while((t != 10) && (u != 13) && m_socketb)
{
u = t;
test = recv(B,&t,1,0);
if(test == 1)
{
increm++;
result[increm] = t;
}
if(test == SOCKET_ERROR)
{
m_socketb = false;
}
}
if(increm <= 0)
{
//Rien reçut
}
else
{
result[increm+1]='\0';
if(Validation(nbVirg((BYTE *)result),result[3],result[4],result[5]))
{
//TRAITEMENT DE LA TRAME PAR CTRAITEMENT
if (m_Tboucle != NULL && m_on_tcp)
{
BYTE * env = new BYTE[200];
strcpy((char *)env,(char *)result);
::PostThreadMessage(m_Tboucle->m_nThreadID,
WM_THREAD_TRAIT
,NULL
,LPARAM(env)
);
result[0]='\0';
}
//TRAITEMENT DE LA TRAME PAR CTRAITEMENT
}
}
}
}
}
}
}
else
{
//ERREUR DE IOCTL
}
}
}
return 1;
} |
Partager