/* Bind socket to port 8888 on localhost */ #include<io.h> #include<string> #include<iostream> #include<stdio.h> #include<winsock2.h> #pragma comment(lib,"ws2_32.lib") //Winsock Library using namespace std; struct history { string user[100]; string host[100]; }; struct client { SOCKET client_socket; string id,name,family_name; }; WSADATA wsa; history vec[10]; SOCKET s; client list[10]; struct sockaddr_in server, client2; int c; int recv_size; char *message, server_reply[100]; bool search(string str,string str2) { int i=0; while (i<sizeof(str)) { int j=0; int flag=0; if (str[i]==str2[j]) { for (j;j<sizeof(str2);j++) { if (str[i]==str2[j]) { flag++; } i++; } } if (flag==sizeof(str2)) { return 1; } } } string search(string str,int part) { string str2; int swap=0; while (swap<sizeof(str)) { int j=0; int flag=0; if (str[swap]==' ' && part==2) { int count=0; while (str[swap]!='&') { str2[count]=str[swap+1]; swap++; } break; } if (swap=0 && part==1) { while (str[swap]!=' ') { str2[swap]=str[swap]; } break; } } return str2; } bool division(string str,int temp) { string str2,str3; int swap=0; int flag=0; while (swap<sizeof(str)) { int j=0; if (str[swap]==' ') { int count=0; while (str[swap]!='*') { str2[count]=str[swap+1]; swap++; } break; } if (swap=0) { while (str[swap]!=' ') { str3[swap]=str[swap]; } break; } } for (int i=0;i<temp;i++) { if (list[i].name==str2 && list[i].family_name==str3) flag=1; } return flag; } int main(int argc, char *argv[]) { printf("\nInitialising Winsock..."); if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { printf("Failed. Error Code : %d", WSAGetLastError()); return 1; } printf("Initialised.\n"); //Create a socket if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { printf("Could not create socket : %d", WSAGetLastError()); } printf("Socket created.\n"); //Prepare the sockaddr_in structure server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(8888); int o=0; //Bind if (bind(s, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR) { printf("Bind failed with error code : %d", WSAGetLastError()); } puts("Bind done"); int count=0; int id=0; bool star; char str[100]; while (1) { //Listen to incoming connections listen(s, 10); if (!o) { //Accept and incoming connection puts("Waiting for incoming connections..."); c = sizeof(struct sockaddr_in); list[count].client_socket = accept(s, (struct sockaddr *)&client2, &c); if ((recv_size = recv(list[count].client_socket, server_reply, 2000, 0)) == SOCKET_ERROR) { puts("recv failed"); } puts("Reply received\n"); //Add a NULL terminating character to make it a proper string before printing server_reply[recv_size] = '\0'; if (list[count].client_socket == INVALID_SOCKET) { printf("accept failed with error code : %d", WSAGetLastError()); } puts("Connection accepted"); o++; } else { if ((recv_size = recv(list[count].client_socket, server_reply, 2000, 0)) == SOCKET_ERROR) { puts("recv failed"); } puts("Reply received\n"); server_reply[recv_size] = '\0'; } //Add a NULL terminating character to make it a proper string before printing if (search(server_reply,"&")) { list[count].name=search(server_reply,1); list[count].family_name=search(server_reply,2); list[count].id=char(count); if (count=0); } if (search(server_reply,"*")) { if (division(server_reply,count)) star=1; } cout<<"Tell client something: "; cin>>str; message = str; if (star) message[strlen(message)]='*'; send(list[count].client_socket, message, strlen(message), 0); } getchar(); closesocket(s); WSACleanup(); return 0; }