210 | | int StartShell() { |
211 | | // Start socket server |
212 | | |
213 | | |
214 | | try |
215 | | { |
216 | | //Create the socket |
217 | | ServerSocket server ( SERVER_PORT ); |
218 | | ServerSocket server_1 ( 30001 ); |
219 | | |
220 | | cout << "Waiting for Cognitive Engine to connect: port " << SERVER_PORT << endl;; |
221 | | while ( true ) |
222 | | { |
223 | | ServerSocket new_sock; |
224 | | server.accept ( new_sock ); |
225 | | |
226 | | try |
227 | | { |
228 | | while ( true ) { |
229 | | string data; |
230 | | new_sock >> data; |
231 | | new_sock << data; |
232 | | } |
233 | | } |
234 | | catch ( SocketException& ) {} |
235 | | |
236 | | } |
237 | | } |
238 | | catch ( SocketException& e ) |
239 | | { |
240 | | cout << "Exception was caught:" << e.description() << "\nExiting.\n"; |
241 | | } |
242 | | |
243 | | return 0; |
| 212 | void error(char *msg) |
| 213 | { |
| 214 | perror(msg); |
| 215 | exit(1); |
| 216 | } |
| 217 | |
| 218 | void StartMessageParser( int socketfd) { |
| 219 | char buffer[256]; |
| 220 | int n; |
| 221 | |
| 222 | while(1) { |
| 223 | // Clear incoming data buffer |
| 224 | bzero(buffer,256); |
| 225 | |
| 226 | // Wait for incoming message |
| 227 | n = recv(socketfd,buffer,255,0); |
| 228 | if (n < 0) error("ERROR reading from socket"); |
| 229 | if (n == 0) error("Client has closed the connection."); |
| 230 | |
| 231 | // Print message |
| 232 | printf("Here is the message: %s\n",buffer); |
| 233 | |
| 234 | // Write message back to client |
| 235 | n = write(socketfd,"I got your message",18); |
| 236 | if (n < 0) error("ERROR writing to socket"); |
| 237 | } |
| 238 | } |
| 239 | |
| 240 | int StartShell(int port) { |
| 241 | // Start socket server |
| 242 | int sockfd, newsockfd, clilen; |
| 243 | struct sockaddr_in serv_addr, cli_addr; |
| 244 | |
| 245 | // Setup socket connection |
| 246 | |
| 247 | sockfd = socket(AF_INET, SOCK_STREAM, 0); |
| 248 | if (sockfd < 0) |
| 249 | error("ERROR opening socket"); |
| 250 | bzero((char *) &serv_addr, sizeof(serv_addr)); |
| 251 | serv_addr.sin_family = AF_INET; |
| 252 | serv_addr.sin_addr.s_addr = INADDR_ANY; |
| 253 | serv_addr.sin_port = htons(port); |
| 254 | if (bind(sockfd, (struct sockaddr *) &serv_addr, |
| 255 | sizeof(serv_addr)) < 0) |
| 256 | error("ERROR on binding"); |
| 257 | listen(sockfd,5); |
| 258 | clilen = sizeof(cli_addr); |
| 259 | newsockfd = accept(sockfd, |
| 260 | (struct sockaddr *) &cli_addr, |
| 261 | (socklen_t*)&clilen); |
| 262 | if (newsockfd < 0) |
| 263 | error("ERROR on accept"); |
| 264 | |
| 265 | // Begin parsing the messages |
| 266 | StartMessageParser(newsockfd); |
| 267 | |
| 268 | return 0; |