#include <iostream>
#include <vector>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <cstring>
#include <winsock2.h>
#include <ws2tcpip.h>
#include "server.hpp"
using namespace std;
#define PORT 8080
HDE::server::server(int domain, int service, int protocol, u_long IP){
//defines address structure
address.sin_family = domain;
address.sin_port = htons(PORT);
address.sin_addr.s_addr = htonl(IP);
sock = socket(domain,service,protocol);
test_connection(sock);
}
void HDE::server::test_connection(int item_to_test){
if(item_to_test < 0){
perror("failed to connect...");
exit(EXIT_FAILURE);
}
}
struct sockaddr_in HDE::server::get_address(){
return address;
}
int HDE::server::get_sock(){
return sock;
}
int HDE::server::get_connection(){
return connection;
}
void HDE::server::set_connection (int conn){
connection = conn;
}
int main(int argc, char const *argv[]){
int server_fd, new_socket; long valread;
struct sockaddr_in address;// address of the server
int addrlen = sizeof(address); // collects the address length
char *hello = "Hello from server";
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)// Collects a socket error
{
perror("In socket");
exit(EXIT_FAILURE);
}
//Gets the address and port
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( PORT );
memset(address.sin_zero, '\0', sizeof address.sin_zero);
if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0)
{
perror("In bind");
exit(EXIT_FAILURE);
}
if (listen(server_fd, 10) < 0)//listens for client
{
perror("In listen");
exit(EXIT_FAILURE);
}
while(1)
{
printf("\n+++++++ Waiting for new connection ++++++++\n\n");
if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0)// connected with client
{
perror("In accept");
exit(EXIT_FAILURE);
}
char buffer[30000] = {0};
valread = read( new_socket , buffer, 30000);
printf("%s\n",buffer );
write(new_socket , hello , strlen(hello));
printf("------------------Hello message sent-------------------\n");
close(new_socket);
}
return 0;
}