#include <winsock2.h>
#include <iostream>
#include <fstream>
using namespace std;
int main(void)
{
WSAData wsaData;
WSAStartup(MAKEWORD(2, 1), &wsaData);
char hostName[80];
if ( gethostname(hostName, sizeof(hostName)) == SOCKET_ERROR )
cout << " Error" << endl;
cout<<"Host Name: "<<hostName<<endl;
LPHOSTENT mashInf = gethostbyname(hostName);
char* adressIP = 0;
for (int i = 0; mashInf->h_addr_list[i] != 0; ++i)
{
in_addr hostInfo;
memcpy(&hostInfo, mashInf->h_addr_list[i], sizeof(in_addr));
adressIP = inet_ntoa(hostInfo);
}
cout <<"Aktualny lokalny/wewnetrzny adres IP komputera/serwera: "<< adressIP << endl;
SOCKADDR_IN addr; // informacje do nawiazania polaczenia
SOCKET gniazdoNasluchu = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // stworzsenie gzniaza nasluchu
SOCKET klient;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_family = AF_INET; // AF_INET - gniazdo nalezy do internetu
cout<<"Podaj numer portu nadawania i odbioru: ";
int port = 0;
cin>>port;
addr.sin_port = htons(port);
bind(gniazdoNasluchu, (SOCKADDR*)&addr, sizeof(addr)); // połącznie adresu lokalnego z socketem
listen(gniazdoNasluchu, 10); // ustawienie gniazda w stan nasluchu
cout << "\n\nCzekam na klienta" << endl;
char message [ 2048 ];// "\nWitamy!\nZalogowales sie na serwerze.\nPozdrawiam Radek Bednarczyk";
fstream file("index.html", ios::in | ios::out);
file.read( message , sizeof(message) );
for (;;)
{
if (klient = accept(gniazdoNasluchu, 0, 0) )
{
cout << "Podlaczyl sie nowy kilent." << endl;
send(klient, message, strlen(message), 0);
}
}
WSACleanup();
return 0;
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset="iso-8859-2" />
<meta name="Description" content="Welcome" />
<meta name="Keywords" content="Moja strona" />
<title>Welcome</title>
</head>
<body>
<b>WITAJ</b>
</body>
</html>
Efekt działania programu:
https://imageshack.com/i/p3UdBnbcj
Dlaczego przeglądarka nie zamienia kodu html przesłanego przez funkcję send() na poprawny layout strony ? ( Wszystko działa po necie ) Programy pisałem na czuja, więc liczę na wyrozumiałość spokojne rozwiązanie problemu. Jaki jest idea przesyłania strony html na przeglądarkę poprzez pojedynczy plik html czy jako ciąg znaków tak jak w moim przepadku. Znam się trochę na ramkach protokołach TCP, UDP, IP portach i modelu warstwowym sieci także wszelka terminologia z tym związana nie jest mi obca i wszelkie pomysły są mile widziane. Czy należy ten serwer, który napisałem wzbogacić o implementację zapytań serwera? Z tego co widzę przeglądarka tak jakby nie przerywała sesji wczytywania danych bo ciągle kręci się kółko w zakładce. Czy należy zejść poziom niżej z kodem i implementować przesyłanie pakietów.. ? Dziwie się, że to co napisałem w ogóle działa. Dane przesyłam na port 80 protokołu HTTP i wartość 80 trzeba wpisywać w serwerze gdy go włączamy. Nie próbowałem jeszcze rozwiązania z wielowątkowego serwera, ale myślę że istota problemu kryje się już w tym co napisałem.
Proszę o pomoc i pozdrawiam.
Plik index.html jest w pakiecie z plikiem wykonywalnym serwera.