A statikus HTML oldalt a szerver a /scriptfiles mappából olvassa ki, <- Ezt pontosan hogy érted?a többi tiszta, socket pluginnal webadmin kb easy win, de őőőő ez a rész mit jelente?
A statikus HTML oldalt a szerver a /scriptfiles mappából olvassa ki,
<html><body><h1>Szerver leállítása</h1><form action=\"szerver_leallitas\" method=\"post\"><input type=\"submit\" value=\"Leállítás\"></form></body></html> [/quote]A HTML oldal designje nem fontos, az nem lesz értékelve, a lényeg maga a szerver.A webszervereden tudod ellenőrízni, hogy milyen HTTP kérések jönnek be, ha bejön egy POST kérés a szerver_leallitas URL-re, akkor egyszerűen a scripten belülről küldesz egy RCON exit parancsot.Az hülyeség, hogy angol dokumentációt kell olvasni, csak az eredeti RFC-t adtam ki, de ha rákeresel az interneten, hogy a HTTP protokol hogy működik, igazából nagyon egyszerű. Ha van PuTTY-d, akkor egyszerűen felcsatlakozol pl. a httpbin.org-ra a 80-as porton, és elkezdesz tesztelgetni, kiírja az összes HTTP fejlécet, amit a kliensed elküld (ha megnyitod pl. a https://httpbin.org/get oldalt).De segítségképp itt van egy példa kérés-válasz: GET / HTTP/1.1Host: teszthoszt.huAccept: text/htmlUser-Agent: pelda HTTP kliens HTTP/1.1 200 OKServer: pelda http szerverDate: Thu, 13 Oct 2016 15:22:21 GMTContent-Type: text/html; charset=utf-8Content-Length: 46<html><body><h1>hello vilag</h1></body></html>
GET / HTTP/1.1Host: teszthoszt.huAccept: text/htmlUser-Agent: pelda HTTP kliens
HTTP/1.1 200 OKServer: pelda http szerverDate: Thu, 13 Oct 2016 15:22:21 GMTContent-Type: text/html; charset=utf-8Content-Length: 46<html><body><h1>hello vilag</h1></body></html>
#include <a_samp>#include <socket>#include <sscanf2>new Socket:sock;main(){print(\"\\n----------------------------------\");print(\" Pelda HTTP szerver\\n\");print(\"----------------------------------\\n\");sock = socket_create(TCP);socket_set_max_connections(sock, 5000);socket_bind(sock, \"127.0.0.1\");socket_listen(sock, 80);}public onSocketReceiveData(Socket:id, remote_clientid, data[], data_len){print(data);new method[10];if(sscanf(data, \"s[10]{s}\", method))return printf(\"invalid request, might want to send something back\");if(!strcmp(method, \"GET\")) {printf(\"got a GET request, let\'s send back a stock response\");ServeHTTP(id, remote_clientid);return 1;}if(!strcmp(method, \"POST\")) {printf(\"got a POST request\");return 1;}return 1;}stock ServeHTTP(Socket:id, remote_clientid){new File:handle = fopen(\"response\", io_read);new buf[128];if(!handle)return printf(\"there\'s been an error opening the response file\");while(fread(handle, buf))socket_sendto_remote_client(id, remote_clientid, buf);fclose(handle);return 1;}
HTTP/1.1 200 OKServer: sample http serverContent-Type: text/html; charset=utf-8Content-Length: 46<html><body><h1>hello vilag</h1></body></html>
Nyilván ez nem produkciókész kód, pl. a HTTP fejlécet nem fájlból kéne kiolvasnia, hiszen pl. a tartalom hossza függ a fájl hosszától, illetve dátumot is kéne küldeni a szervernek.
HTTP/1.1 200 OKContent-type: text/html; charset=iso-8859-2
Char Dec Col/Row Oct Hex Name and Description 0 00/00 00 00 NUL (Ctrl-@) NULL
Ezen kívül, ha csak nem akarod, hogy a böngészőtől rengeteg GET kérést kapj képekre és egyéb adatokra, akkor erősen ajánlom, hogy a szerver azonnal bontsa a kapcsolatot, amint a HTML oldalt kiküldte, és lehetőleg csak egy HTML oldalt szolgáljon ki a szerver (egyébként kell egy statikus tartalom-kiszolgáló szervert írnod, mint pl. az apache public_html cucca).
statikus tartalom-kiszolgáló szervert írnod, mint pl. az apache public_html cucca
Nem feltétlen így értette valamennyire én már jöttem a dolgokra most csak idő kell, az API-m alapja kész van szóval.Bár már 2. ra esek neki a dolgoknak csak 1. közel sem ilyesmire gondoltam mt amit Reynolds le írt hogy mi kellene neki.
Nyilván ez nem produkciókész kód, pl. a HTTP fejlécet nem fájlból kéne kiolvasnia, hiszen pl. a tartalom hossza függ a fájl hosszától, illetve dátumot is kéne küldeni a szervernek. Nem kötelező elküldeni ezeket, max kép fájloknál.Nekem ennyivel működik: HTTP/1.1 200 OKContent-type: text/html; charset=iso-8859-2 [/quote]Működni működik, csak a szabvány szerint kell dátum, ha a szerver tud küldeni olyat. Origin servers MUST include a Date header field in all responses, except in these cases: 1. If the response status code is 100 (Continue) or 101 (Switching Protocols), the response MAY include a Date header field, at the server\'s option. 2. If the response status code conveys a server error, e.g. 500 (Internal Server Error) or 503 (Service Unavailable), and it is inconvenient or impossible to generate a valid Date. 3. If the server does not have a clock that can provide a reasonable approximation of the current time, its responses MUST NOT include a Date header field. In this case, the rules in section 14.18.1 MUST be followed. A tartalom hosszát nem kell elküldeni, de ha a szerver leáll valami ok miatt a küldés során akkor nem garantálható az adat integritása, szóval biztonsági okok miatt eléggé javasolt az elküldése. A szabvány ettől függően kéri, hogy hacsak nincs külön indok rá, legyen elküldve az üzenet hossza: Applications SHOULD use this field to indicate the transfer-length of the message-body, unless this is prohibited by the rules in section 4.4. Az alap socket_send függvény szöveget vár, nem tömböt, ami NULL-terminált. socket_send_array()-al elvileg lehet küldeni tetszőleges hosszúságú, tetszőleges tartalmú tömböt. statikus tartalom-kiszolgáló szervert írnod, mint pl. az apache public_html cucca Fogalmam sincs ez mit jelent. [/quote]Gyakorlatilag, hogy egy komplett webszervert kell írj, ami a weboldalra érkező GET kéréseket megfelelteti egy mappaszerkezetnek a webszervereden, például a scriptfiles/asd/fgh/j.png képet kiszolgálja a szerver, ha a http://localhost/asd/fgh/j.png képet lekéred a böngésződből. Ezt nem kötelező megcsinálni, csak mondtam, hogy a sok probléma miatt javasolt az, hogy csak egy szimpla HTML oldalt dobjon vissza a szerver minden kérésre.
Origin servers MUST include a Date header field in all responses, except in these cases: 1. If the response status code is 100 (Continue) or 101 (Switching Protocols), the response MAY include a Date header field, at the server\'s option. 2. If the response status code conveys a server error, e.g. 500 (Internal Server Error) or 503 (Service Unavailable), and it is inconvenient or impossible to generate a valid Date. 3. If the server does not have a clock that can provide a reasonable approximation of the current time, its responses MUST NOT include a Date header field. In this case, the rules in section 14.18.1 MUST be followed.
Applications SHOULD use this field to indicate the transfer-length of the message-body, unless this is prohibited by the rules in section 4.4.
statikus tartalom-kiszolgáló szervert írnod, mint pl. az apache public_html cucca Fogalmam sincs ez mit jelent. [/quote]Gyakorlatilag, hogy egy komplett webszervert kell írj, ami a weboldalra érkező GET kéréseket megfelelteti egy mappaszerkezetnek a webszervereden, például a scriptfiles/asd/fgh/j.png képet kiszolgálja a szerver, ha a http://localhost/asd/fgh/j.png képet lekéred a böngésződből. Ezt nem kötelező megcsinálni, csak mondtam, hogy a sok probléma miatt javasolt az, hogy csak egy szimpla HTML oldalt dobjon vissza a szerver minden kérésre.
Az alap socket_send függvény szöveget vár, nem tömböt, ami NULL-terminált. socket_send_array()-al elvileg lehet küldeni tetszőleges hosszúságú, tetszőleges tartalmú tömböt.
Az alap socket_send függvény szöveget vár, nem tömböt, ami NULL-terminált. socket_send_array()-al elvileg lehet küldeni tetszőleges hosszúságú, tetszőleges tartalmú tömböt. Ha a socket_send, socket_send_array függvényeket használom, a böngésző nem kap meg semmilyen adatot. Csak a socket_sendto_remote_client-el működik.