// EXAMPLE2.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include #include #include #include //Bay gio them mot so header dac biet cho project #include #include #include using namespace std; //#include const char html[] = "HTTP/1.1 200 OK\r\n" "Connection: close\r\n" "Content-type: text/html\r\n" "\r\n" "\r\n" "\r\n" "Hello, world!\r\n" "\r\n" "\r\n" "

Hello, world!

\r\n" "\r\n" "\r\n\r\n"; int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsa; int ret = 0; //assert( WSAStartup( MAKEWORD( 2, 2 ), &wsa ) == 0 ); ret = WSAStartup( MAKEWORD( 2, 2 ), &wsa ); SOCKET server; SOCKET clients[64]; for (int i =0;i<64;i++){ clients[i]=0; } SOCKADDR_IN serverAddr,clientAddr; int clientAddrLen=sizeof(clientAddr); char szxau[1024]; server=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); serverAddr.sin_addr.s_addr=htonl(INADDR_ANY); serverAddr.sin_family=AF_INET; serverAddr.sin_port=htons(80); ret=bind(server,(sockaddr*)&serverAddr,sizeof(serverAddr)); ret=listen(server,16); fd_set fdread; int chk=0;//??? int count = 0; char* pass = "123456"; while(1){ FD_ZERO(&fdread); FD_SET(server,&fdread); for (int i = 0;i<=count;i++){ if(clients[i] !=0) { FD_SET(clients[i],&fdread); } } ret = select(0,&fdread,0,0,0); if(ret >0){ if(FD_ISSET(server,&fdread)) { if(clients[count]==0){ clients[count]=accept(server,(sockaddr*)&clientAddr,&clientAddrLen); printf("Client %d has connected to the server. \n",count+1); char* szHello = "Hay Nhap Password: \n"; ret = send(clients[count],szHello,strlen(szHello),0); //send( clients[count], html, strlen( html ) - 1, 0 ) >0 ; ret = recv(clients[count],szxau,strlen(szxau),0); //printf("%d %d",ret, strlen(pass)); szxau[ret-1]=NULL; //printf("%s %s %d",szxau,pass,strlen(szxau)); for (int i =0;i<=ret-1;i++){ if (szxau[i]!=pass[i]) chk=1; } if (chk==1) { //printf(":))"); char* szSai = "Sai password!"; ret = send(clients[count],szSai,strlen(szSai),0); //closesocket(clients[count]); } else if (chk==0) printf("Dang nhap thanh cong. \n"); count++; } } for (int i=0;i0) { szxau[ret]=0; printf("Client %d:%s \n",i+1,szxau); } else { printf("Client disconnected. \n"); closesocket(clients[i]); clients[i]=0; } }}} } addrinfo *res = NULL; addrinfo hints; int hintslen = sizeof(hints); ZeroMemory( &hints, hintslen ); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; //assert( getaddrinfo( NULL, "80", &hints, &res ) == 0 ); getaddrinfo( NULL, "80", &hints, &res ) == 0; SOCKET s = socket( res->ai_family, res->ai_socktype, res->ai_protocol ); //assert( s != INVALID_SOCKET ); s != INVALID_SOCKET; //assert( bind( s, res->ai_addr, (int)res->ai_addrlen ) != SOCKET_ERROR ); bind( s, res->ai_addr, (int)res->ai_addrlen ) != SOCKET_ERROR; //assert( listen( s, SOMAXCONN ) != SOCKET_ERROR ); listen( s, SOMAXCONN ) != SOCKET_ERROR; SOCKET client = accept( s, NULL, NULL ); //assert( client != INVALID_SOCKET ); client != INVALID_SOCKET; char buffer[512]; int bytes; bytes = recv( client, buffer, 512, 0 ); for ( int i = 0; i < bytes; ++i ) { std::cout << buffer[i]; } /*for(;;) { cout << "Waiting for an incoming connection" < 0 ); char* szHello = "Hello Network Programming"; ret = send(clients[64],szHello,strlen(szHello),0); //send( client, html, strlen( html ) - 1, 0 ) >0 ; //assert( shutdown( client, SD_BOTH ) != SOCKET_ERROR ); shutdown( client, SD_BOTH ) != SOCKET_ERROR; _getch(); closesocket(server); //closesocket( client ); WSACleanup(); return 0; }