Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface NetworkAPI SDC21XX_Motor mbed-rtos mbed
Fork of TCP_Server_Example by
main.cpp
- Committer:
- NegativeBlack
- Date:
- 2014-11-15
- Revision:
- 11:90554d22ade5
- Parent:
- 10:9e8d5928537a
- Child:
- 12:5e342c364d61
File content as of revision 11:90554d22ade5:
#include "mbed.h"
#include "EthernetInterface.h"
#include "NetworkAPI/buffer.hpp"
#include "NetworkAPI/select.hpp"
#include "NetworkAPI/ip/address.hpp"
#include "NetworkAPI/tcp/socket.hpp"
using namespace network;
#define MAX_CLIENTS 5
int
main()
{
EthernetInterface interface;
interface.init();
interface.connect();
printf("IP Address is %s\n\r", interface.getIPAddress());
Select select;
tcp::Socket server;
tcp::Socket client[MAX_CLIENTS];
tcp::Socket *socket = NULL;
int result = 0;
int index = 0;
network::Buffer buffer(256);
std::string message("Hello world!");
// Configure the server socket (assume everty thing works)
server.open();
server.bind(1234);
server.listen(MAX_CLIENTS);
// Add sockets to the select api
select.set(&server, Select::Read);
for (index = 0; index < MAX_CLIENTS; index++) {
select.set(&client[index], Select::Read);
}
do {
// Wait for activity
result = select.wait();
if (result < -1) {
printf("Failed to select\n\r");
break;
}
// Get the first socket
socket = (tcp::Socket *)select.getReadable();
for (; socket != NULL; socket = (tcp::Socket *)select.getReadable()) {
// Check if there was a connection request.
if (socket->getHandle() == server.getHandle()) {
// Find an unused client
for (index = 0; index < MAX_CLIENTS; index++) {
if (client[index].getStatus() == network::Socket::Closed) {
break;
}
}
// Maximum connections reached
if (index == MAX_CLIENTS) {
printf("Maximum connections reached\n\r");
continue;
}
// Accept the client
socket->accept(client[index]);
printf("Client connected %s:%d\n\r",
client[index].getRemoteEndpoint().getAddress().toString().c_str(),
client[index].getRemoteEndpoint().getPort());
// Send a nice message to the client
client[index].write((void *)message.data(), message.size());
continue;
}
// It was not the server socket, so it must be a client talking to us.
switch (socket->read(buffer)) {
case 0:
// Remote end disconnected
printf("Client disconnected %s:%d\n\r",
socket->getRemoteEndpoint().getAddress().toString().c_str(),
socket->getRemoteEndpoint().getPort());
// Close socket
socket->close();
break;
case -1:
printf("Error while reading data from socket\n\r");
socket->close();
break;
default:
printf("Message from %s:%d\n\r",
socket->getRemoteEndpoint().getAddress().toString().c_str(),
socket->getRemoteEndpoint().getPort());
printf("%s\n\r", (char *)buffer.data());
break;
}
}
} while (server.getStatus() == network::Socket::Listening);
}
