Added raw send and receive. Fixed TcpSocket close bug.

Can now send and receive raw data over TcpSockets for communicating with other protocols, such as HTTP.

Fixed TcpSocket::close only calling close() if the connection isn't open (gg wp)
This commit is contained in:
Fred Nicolson
2016-12-10 12:59:07 +00:00
parent a9493fca2a
commit a3eb2ccd0a
3 changed files with 95 additions and 32 deletions
+24 -19
View File
@@ -41,13 +41,18 @@ void server()
{
if(selector.is_ready(**iter))
{
fr::Packet packet;
if((*iter)->receive(packet) == fr::Socket::Success)
std::string message(1024, '\0');
size_t received;
if((*iter)->receive_raw(&message[0], 1024, received) == fr::Socket::Success)
{
std::string message;
packet >> message;
std::cout << (*iter)->get_remote_address() << " sent: " << message << std::endl;
iter++;
std::cout << (*iter)->get_remote_address() << " sent: " << message.substr(0, received) << std::endl;
message.clear();
message = "HTTP/1.1 " + std::to_string(200) + " \r\nConnection: close\r\nContent-type: text/html\r\n\r\n<h1>Hey</h1>\r\n";
(*iter)->send_raw(&message[0], message.size());
std::cout << "Sent" << std::endl;
(*iter)->close();
}
else
{
@@ -67,19 +72,19 @@ void server()
void client()
{
fr::TcpSocket socket;
socket.connect("127.0.0.1", "8081");
fr::TcpSocket socket2;
socket2.connect("127.0.0.1", "8081");
fr::Packet packet;
packet << "Hello, World! - From socket 1";
socket.send(packet);
packet.clear();
packet << "Hello, world! - From socket 2";
socket2.send(packet);
// fr::TcpSocket socket;
// socket.connect("127.0.0.1", "8081");
//
// fr::TcpSocket socket2;
// socket2.connect("127.0.0.1", "8081");
//
// fr::Packet packet;
// packet << "Hello, World! - From socket 1";
// socket.send(packet);
//
// packet.clear();
// packet << "Hello, world! - From socket 2";
// socket2.send(packet);
return;
}