TCP Server that handles multiple client requests at the same time using multiple threads
Dependencies: EthernetInterface Server mbed-rtos mbed Threads
main.cpp
- Committer:
- lemniskata
- Date:
- 2013-06-11
- Revision:
- 3:91fa989f29e2
- Parent:
- 2:fe6ad47cd3eb
- Child:
- 4:b8145a198e58
File content as of revision 3:91fa989f29e2:
#include "mbed.h" #include "EthernetInterface.h" #include "Server.h" #define SERVER_PORT 7 #define BUFFLEN 100 char buffer[256]; /*void Handle_client(void const *socket_data) { int socket; socket = (int)socket_data; int n = lwip_recv(socket ,buffer,sizeof(buffer),0); if (lwip_send(socket ,buffer,n,0)!=n) //send the content of the shared memory back to the socket { } }*/ void Start_server(void const *port) { int _port=(int) port; Server my_server(_port,3); my_server.Start(); } //osThreadDef(Handle_client, osPriorityNormal, DEFAULT_STACK_SIZE); osThreadDef(Start_server, osPriorityNormal, DEFAULT_STACK_SIZE); int main (void) { int port=7; osThreadCreate(osThread(Start_server), (void *) port); /* EthernetInterface eth; eth.init(); //Use DHCP eth.connect(); // Thread t1(Debug, (void *) 1); int socket_server; struct sockaddr_in localHost; memset(&localHost, 0, sizeof(localHost)); int new_socket; if( (socket_server= lwip_socket(AF_INET, SOCK_STREAM, 0))<0) { return -1; } localHost.sin_family = AF_INET; localHost.sin_port = htons(SERVER_PORT); localHost.sin_addr.s_addr = INADDR_ANY; if (lwip_bind(socket_server, (const struct sockaddr *) &localHost, sizeof(localHost)) < 0) { return -1; } if (lwip_listen(socket_server,3)<0) { perror("listen"); exit(EXIT_FAILURE); } socklen_t newSockRemoteHostLen = sizeof(localHost); int tid; for(tid=0;tid<=2;tid++) { new_socket = lwip_accept(socket_server, (struct sockaddr*) &localHost, &newSockRemoteHostLen); if (new_socket < 0) { return -1; } osThreadCreate(osThread(Handle_client), (void *) new_socket); }*/ }