A-M baby
This commit is contained in:
parent
764da6cbbb
commit
db842d013d
19005 changed files with 197040 additions and 7 deletions
5
Task/Hello-world-Web-server/0DESCRIPTION
Normal file
5
Task/Hello-world-Web-server/0DESCRIPTION
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
The browser is the new [[GUI]]!
|
||||
|
||||
The task is to serve our standard text "Goodbye, World!" to http://localhost:8080/ so that it can be viewed with a web browser. The provided solution must start or implement a server that accepts multiple client connections and serves text as requested.
|
||||
|
||||
Note that starting a web browser or opening a new window with this URL is not part of the task. Additionally, it is permissible to serve the provided page as a plain text file (there is no requirement to serve properly formatted [[HTML]] here). The browser will generally do the right thing with simple text like this.
|
||||
2
Task/Hello-world-Web-server/1META.yaml
Normal file
2
Task/Hello-world-Web-server/1META.yaml
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
note: Networking and Web Interaction
|
||||
15
Task/Hello-world-Web-server/AWK/hello-world-web-server.awk
Normal file
15
Task/Hello-world-Web-server/AWK/hello-world-web-server.awk
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/gawk -f
|
||||
BEGIN {
|
||||
RS = ORS = "\r\n"
|
||||
HttpService = "/inet/tcp/8080/0/0"
|
||||
Hello = "<HTML><HEAD>" \
|
||||
"<TITLE>A Famous Greeting</TITLE></HEAD>" \
|
||||
"<BODY><H1>Hello, world</H1></BODY></HTML>"
|
||||
Len = length(Hello) + length(ORS)
|
||||
print "HTTP/1.0 200 OK" |& HttpService
|
||||
print "Content-Length: " Len ORS |& HttpService
|
||||
print Hello |& HttpService
|
||||
while ((HttpService |& getline) > 0)
|
||||
continue;
|
||||
close(HttpService)
|
||||
}
|
||||
19
Task/Hello-world-Web-server/Ada/hello-world-web-server.ada
Normal file
19
Task/Hello-world-Web-server/Ada/hello-world-web-server.ada
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
with AWS; use AWS;
|
||||
with AWS.Response;
|
||||
with AWS.Server;
|
||||
with AWS.Status;
|
||||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
procedure HelloHTTP is
|
||||
function CB (Request : Status.Data) return Response.Data is
|
||||
pragma Unreferenced (Request);
|
||||
begin
|
||||
return Response.Build ("text/html", "Hello world!");
|
||||
end CB;
|
||||
TheServer : Server.HTTP;
|
||||
ch : Character;
|
||||
begin
|
||||
Server.Start (TheServer, "Rosettacode",
|
||||
Callback => CB'Unrestricted_Access, Port => 8080);
|
||||
Put_Line ("Press any key to quit."); Get_Immediate (ch);
|
||||
Server.Shutdown (TheServer);
|
||||
end HelloHTTP;
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
INSTALL @lib$+"SOCKLIB"
|
||||
PROC_initsockets
|
||||
|
||||
maxSess% = 8
|
||||
DIM sock%(maxSess%-1), rcvd$(maxSess%-1), Buffer% 255
|
||||
|
||||
ON ERROR PRINT REPORT$ : PROC_exitsockets : END
|
||||
ON CLOSE PROC_exitsockets : QUIT
|
||||
|
||||
port$ = "8080"
|
||||
host$ = FN_gethostname
|
||||
PRINT "Host name is " host$
|
||||
|
||||
listen% = FN_tcplisten(host$, port$)
|
||||
PRINT "Listening on port ";port$
|
||||
|
||||
REPEAT
|
||||
socket% = FN_check_connection(listen%)
|
||||
IF socket% THEN
|
||||
FOR i% = 0 TO maxSess%-1
|
||||
IF sock%(i%) = 0 THEN
|
||||
sock%(i%) = socket%
|
||||
rcvd$(i%) = ""
|
||||
PRINT "Connection on socket "; sock%(i%) " opened"
|
||||
EXIT FOR
|
||||
ENDIF
|
||||
NEXT i%
|
||||
listen% = FN_tcplisten(host$, port$)
|
||||
ENDIF
|
||||
|
||||
FOR i% = 0 TO maxSess%-1
|
||||
IF sock%(i%) THEN
|
||||
res% = FN_readsocket(sock%(i%), Buffer%, 256)
|
||||
IF res% >= 0 THEN
|
||||
Buffer%?res% = 0
|
||||
rcvd$(i%) += $$Buffer%
|
||||
IF LEFT$(rcvd$(i%),4) = "GET " AND ( \
|
||||
\ RIGHT$(rcvd$(i%),4) = CHR$13+CHR$10+CHR$13+CHR$10 OR \
|
||||
\ RIGHT$(rcvd$(i%),4) = CHR$10+CHR$13+CHR$10+CHR$13 OR \
|
||||
\ RIGHT$(rcvd$(i%),2) = CHR$10+CHR$10 ) THEN
|
||||
rcvd$(i%) = ""
|
||||
IF FN_writelinesocket(sock%(i%), "HTTP/1.0 200 OK")
|
||||
IF FN_writelinesocket(sock%(i%), "Content-type: text/html")
|
||||
IF FN_writelinesocket(sock%(i%), "")
|
||||
IF FN_writelinesocket(sock%(i%), "<html><head><title>Hello World!</title></head>")
|
||||
IF FN_writelinesocket(sock%(i%), "<body><h1>Hello World!</h1>")
|
||||
IF FN_writelinesocket(sock%(i%), "</body></html>")
|
||||
PROC_closesocket(sock%(i%))
|
||||
PRINT "Connection on socket " ; sock%(i%) " closed (local)"
|
||||
sock%(i%) = 0
|
||||
ENDIF
|
||||
ELSE
|
||||
PROC_closesocket(sock%(i%))
|
||||
PRINT "Connection on socket " ; sock%(i%) " closed (remote)"
|
||||
sock%(i%) = 0
|
||||
ENDIF
|
||||
ENDIF
|
||||
NEXT i%
|
||||
|
||||
WAIT 0
|
||||
UNTIL FALSE
|
||||
END
|
||||
54
Task/Hello-world-Web-server/C/hello-world-web-server.c
Normal file
54
Task/Hello-world-Web-server/C/hello-world-web-server.c
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netdb.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <err.h>
|
||||
|
||||
char response[] = "HTTP/1.1 200 OK\r\n"
|
||||
"Content-Type: text/html; charset=UTF-8\r\n\r\n"
|
||||
"<doctype !html><html><head><title>Bye-bye baby bye-bye</title>"
|
||||
"<style>body { background-color: #111 }"
|
||||
"h1 { font-size:4cm; text-align: center; color: black;"
|
||||
" text-shadow: 0 0 2mm red}</style></head>"
|
||||
"<body><h1>Goodbye, world!</h1></body></html>\r\n";
|
||||
|
||||
int main()
|
||||
{
|
||||
int one = 1, client_fd;
|
||||
struct sockaddr_in svr_addr, cli_addr;
|
||||
socklen_t sin_len = sizeof(cli_addr);
|
||||
|
||||
int sock = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (sock < 0)
|
||||
err(1, "can't open socket");
|
||||
|
||||
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(int));
|
||||
|
||||
int port = 8080;
|
||||
svr_addr.sin_family = AF_INET;
|
||||
svr_addr.sin_addr.s_addr = INADDR_ANY;
|
||||
svr_addr.sin_port = htons(port);
|
||||
|
||||
if (bind(sock, (struct sockaddr *) &svr_addr, sizeof(svr_addr)) == -1) {
|
||||
close(sock);
|
||||
err(1, "Can't bind");
|
||||
}
|
||||
|
||||
listen(sock, 5);
|
||||
while (1) {
|
||||
client_fd = accept(sock, (struct sockaddr *) &cli_addr, &sin_len);
|
||||
printf("got connection\n");
|
||||
|
||||
if (client_fd == -1) {
|
||||
perror("Can't accept");
|
||||
continue;
|
||||
}
|
||||
|
||||
write(client_fd, response, sizeof(response) - 1); /*-1:'\0'*/
|
||||
close(client_fd);
|
||||
}
|
||||
}
|
||||
24
Task/Hello-world-Web-server/D/hello-world-web-server.d
Normal file
24
Task/Hello-world-Web-server/D/hello-world-web-server.d
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
import std.socket, std.array;
|
||||
|
||||
ushort port = 8080;
|
||||
|
||||
void main() {
|
||||
Socket listener = new TcpSocket;
|
||||
listener.bind(new InternetAddress(port));
|
||||
listener.listen(10);
|
||||
|
||||
Socket currSock;
|
||||
|
||||
while(cast(bool)(currSock = listener.accept())) {
|
||||
currSock.sendTo(replace(q"EOF
|
||||
HTTP/1.1 200 OK
|
||||
Content-Type: text/html; charset=UTF-8
|
||||
|
||||
<html>
|
||||
<head><title>Hello, world!</title></head>
|
||||
<body>Hello, world!</body>
|
||||
</html>
|
||||
EOF", "\n", "\r\n"));
|
||||
currSock.close();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
program HelloWorldWebServer;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses SysUtils, IdContext, IdCustomHTTPServer, IdHTTPServer;
|
||||
|
||||
type
|
||||
TWebServer = class
|
||||
private
|
||||
FHTTPServer: TIdHTTPServer;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure HTTPServerCommandGet(AContext: TIdContext;
|
||||
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
|
||||
end;
|
||||
|
||||
constructor TWebServer.Create;
|
||||
begin
|
||||
FHTTPServer := TIdHTTPServer.Create(nil);
|
||||
FHTTPServer.DefaultPort := 8080;
|
||||
FHTTPServer.OnCommandGet := HTTPServerCommandGet;
|
||||
FHTTPServer.Active := True;
|
||||
end;
|
||||
|
||||
destructor TWebServer.Destroy;
|
||||
begin
|
||||
FHTTPServer.Active := False;
|
||||
FHTTPServer.Free;
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TWebServer.HTTPServerCommandGet(AContext: TIdContext;
|
||||
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
|
||||
begin
|
||||
AResponseInfo.ContentText := 'Goodbye, World!';
|
||||
end;
|
||||
|
||||
var
|
||||
lWebServer: TWebServer;
|
||||
begin
|
||||
lWebServer := TWebServer.Create;
|
||||
try
|
||||
Writeln('Delphi Hello world/Web server ');
|
||||
Writeln('Press Enter to quit');
|
||||
Readln;
|
||||
finally
|
||||
lWebServer.Free;
|
||||
end;
|
||||
end.
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
-module(hello_world_server).
|
||||
|
||||
-export([start/0, loop0/1]).
|
||||
|
||||
-define(PORTNO, 8080).
|
||||
|
||||
start() ->
|
||||
start(?PORTNO).
|
||||
start(Pno) ->
|
||||
spawn(?MODULE, loop0, [Pno]).
|
||||
|
||||
loop0(Port) ->
|
||||
case gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}]) of
|
||||
{ok, LSock} ->
|
||||
loop(LSock);
|
||||
_ ->
|
||||
stop
|
||||
end.
|
||||
|
||||
loop(Listen) ->
|
||||
case gen_tcp:accept(Listen) of
|
||||
{ok, S} ->
|
||||
gen_tcp:send(S, io_lib:format("Goodbye, World!~n", [])),
|
||||
gen_tcp:close(S),
|
||||
loop(Listen);
|
||||
_ ->
|
||||
loop(Listen)
|
||||
end.
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
using web
|
||||
using wisp
|
||||
|
||||
const class HelloMod : WebMod // provides the content
|
||||
{
|
||||
override Void onGet ()
|
||||
{
|
||||
res.headers["Content-Type"] = "text/plain; charset=utf-8"
|
||||
res.out.print ("Goodbye, World!")
|
||||
}
|
||||
}
|
||||
|
||||
class HelloWeb
|
||||
{
|
||||
Void main ()
|
||||
{
|
||||
WispService // creates the web service
|
||||
{
|
||||
port = 8080
|
||||
root = HelloMod()
|
||||
}.start
|
||||
|
||||
while (true) {} // stay running
|
||||
}
|
||||
}
|
||||
16
Task/Hello-world-Web-server/Go/hello-world-web-server.go
Normal file
16
Task/Hello-world-Web-server/Go/hello-world-web-server.go
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func main() {
|
||||
http.HandleFunc("/",
|
||||
func(w http.ResponseWriter, req *http.Request) {
|
||||
fmt.Fprintln(w, "Goodbye, World!")
|
||||
})
|
||||
if err := http.ListenAndServe(":8080", nil); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Data.ByteString.Char8 ()
|
||||
import Data.Conduit ( ($$), yield )
|
||||
import Data.Conduit.Network ( ServerSettings(..), runTCPServer )
|
||||
|
||||
main :: IO ()
|
||||
main = runTCPServer (ServerSettings 8080 "127.0.0.1") $ const (yield response $$)
|
||||
where response = "HTTP/1.0 200 OK\nContent-Length: 16\n\nGoodbye, World!\n"
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Data.ByteString.Char8 ()
|
||||
import Network hiding ( accept )
|
||||
import Network.Socket ( accept )
|
||||
import Network.Socket.ByteString ( sendAll )
|
||||
import Control.Monad ( forever )
|
||||
import Control.Exception ( bracket, finally )
|
||||
import Control.Concurrent ( forkIO )
|
||||
|
||||
main :: IO ()
|
||||
main = bracket (listenOn $ PortNumber 8080) sClose loop where
|
||||
loop s = forever $ forkIO . request . fst =<< accept s
|
||||
request c = sendAll c response `finally` sClose c
|
||||
response = "HTTP/1.0 200 OK\nContent-Length: 16\n\nGoodbye, World!\n"
|
||||
1
Task/Hello-world-Web-server/J/hello-world-web-server-1.j
Normal file
1
Task/Hello-world-Web-server/J/hello-world-web-server-1.j
Normal file
|
|
@ -0,0 +1 @@
|
|||
'Goodbye, World!'
|
||||
27
Task/Hello-world-Web-server/J/hello-world-web-server-2.j
Normal file
27
Task/Hello-world-Web-server/J/hello-world-web-server-2.j
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
hello=: verb define
|
||||
8080 hello y NB. try to use port 8080 by default
|
||||
:
|
||||
port=: x
|
||||
require 'socket'
|
||||
coinsert 'jsocket'
|
||||
sdclose ; sdcheck sdgetsockets ''
|
||||
server=: {. ; sdcheck sdsocket ''
|
||||
sdcheck sdbind server; AF_INET; ''; port
|
||||
sdcheck sdlisten server, 1
|
||||
while. 1 do.
|
||||
while.
|
||||
server e. ready=: >{. sdcheck sdselect (sdcheck sdgetsockets ''),'';'';<1e3
|
||||
do.
|
||||
sdcheck sdaccept server
|
||||
end.
|
||||
for_socket. ready do.
|
||||
request=: ; sdcheck sdrecv socket, 65536 0
|
||||
sdcheck (socket responseFor request) sdsend socket, 0
|
||||
sdcheck sdclose socket
|
||||
end.
|
||||
end.
|
||||
)
|
||||
|
||||
responseFor=: dyad define
|
||||
'HTTP/1.0 200 OK',CRLF,'Content-Type: text/plain',CRLF,CRLF,'Goodbye, World!',CRLF
|
||||
)
|
||||
1
Task/Hello-world-Web-server/J/hello-world-web-server-3.j
Normal file
1
Task/Hello-world-Web-server/J/hello-world-web-server-3.j
Normal file
|
|
@ -0,0 +1 @@
|
|||
hello''
|
||||
16
Task/Hello-world-Web-server/Java/hello-world-web-server.java
Normal file
16
Task/Hello-world-Web-server/Java/hello-world-web-server.java
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
|
||||
public class HelloWorld{
|
||||
public static void main(String[] args) throws IOException{
|
||||
ServerSocket listener = new ServerSocket(8080);
|
||||
while(true){
|
||||
Socket sock = listener.accept();
|
||||
new PrintWriter(sock.getOutputStream(), true).
|
||||
println("Goodbye, World!");
|
||||
sock.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
var http = require('http');
|
||||
|
||||
http.createServer(function (req, res) {
|
||||
res.writeHead(200, {'Content-Type': 'text/plain'});
|
||||
res.end('Goodbye, World!\n');
|
||||
}).listen(8080, '127.0.0.1');
|
||||
|
|
@ -0,0 +1 @@
|
|||
print "hello world!"
|
||||
19
Task/Hello-world-Web-server/PHP/hello-world-web-server.php
Normal file
19
Task/Hello-world-Web-server/PHP/hello-world-web-server.php
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
// AF_INET6 for IPv6 // IP
|
||||
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die('Failed to create socket!');
|
||||
// '127.0.0.1' to limit only to localhost // Port
|
||||
socket_bind($socket, 0, 8080);
|
||||
socket_listen($socket);
|
||||
|
||||
$msg = '<html><head><title>Goodbye, world!</title></head><body>Goodbye, world!</body></html>';
|
||||
|
||||
for (;;) {
|
||||
// @ is used to stop PHP from spamming with error messages if there is no connection
|
||||
if ($client = @socket_accept($socket)) {
|
||||
socket_write($client, "HTTP/1.1 200 OK\r\n" .
|
||||
"Content-length: " . strlen($msg) . "\r\n" .
|
||||
"Content-Type: text/html; charset=UTF-8\r\n\r\n" .
|
||||
$msg);
|
||||
}
|
||||
else usleep(100000); // limits CPU usage by sleeping after doing every request
|
||||
}
|
||||
25
Task/Hello-world-Web-server/Perl/hello-world-web-server-1.pl
Normal file
25
Task/Hello-world-Web-server/Perl/hello-world-web-server-1.pl
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
use Socket;
|
||||
|
||||
my $port = 8080;
|
||||
my $protocol = getprotobyname( "tcp" );
|
||||
|
||||
socket( SOCK, PF_INET, SOCK_STREAM, $protocol ) or die "couldn't open a socket: $!";
|
||||
# PF_INET to indicate that this socket will connect to the internet domain
|
||||
# SOCK_STREAM indicates a TCP stream, SOCK_DGRAM would indicate UDP communication
|
||||
|
||||
setsockopt( SOCK, SOL_SOCKET, SO_REUSEADDR, 1 ) or die "couldn't set socket options: $!";
|
||||
# SOL_SOCKET to indicate that we are setting an option on the socket instead of the protocol
|
||||
# mark the socket reusable
|
||||
|
||||
bind( SOCK, sockaddr_in($port, INADDR_ANY) ) or die "couldn't bind socket to port $port: $!";
|
||||
# bind our socket to $port, allowing any IP to connect
|
||||
|
||||
listen( SOCK, SOMAXCONN ) or die "couldn't listen to port $port: $!";
|
||||
# start listening for incoming connections
|
||||
|
||||
while( accept(CLIENT, SOCK) ){
|
||||
print CLIENT "HTTP/1.1 200 OK\r\n" .
|
||||
"Content-Type: text/html; charset=UTF-8\r\n\r\n" .
|
||||
"<html><head><title>Goodbye, world!</title></head><body>Goodbye, world!</body></html>\r\n";
|
||||
close CLIENT;
|
||||
}
|
||||
12
Task/Hello-world-Web-server/Perl/hello-world-web-server-2.pl
Normal file
12
Task/Hello-world-Web-server/Perl/hello-world-web-server-2.pl
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
use IO::Socket::INET;
|
||||
|
||||
my $sock = new IO::Socket::INET ( LocalAddr => "127.0.0.1:8080",
|
||||
Listen => 1,
|
||||
Reuse => 1, ) or die "Could not create socket: $!";
|
||||
|
||||
while( my $client = $sock->accept() ){
|
||||
print $client "HTTP/1.1 200 OK\r\n" .
|
||||
"Content-Type: text/html; charset=UTF-8\r\n\r\n" .
|
||||
"<html><head><title>Goodbye, world!</title></head><body>Goodbye, world!</body></html>\r\n";
|
||||
close $client;
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
while (++(our $vn)) {
|
||||
open NC, "|-", qw(nc -l -p 8080 -q 1);
|
||||
print NC "HTTP/1.0 200 OK\xd\xa",
|
||||
"Content-type: text/plain; charset=utf-8\xd\xa\xd\xa",
|
||||
"Goodbye, World! (hello, visitor No. $vn!)\xd\xa";
|
||||
}
|
||||
10
Task/Hello-world-Web-server/Perl/hello-world-web-server-4.pl
Normal file
10
Task/Hello-world-Web-server/Perl/hello-world-web-server-4.pl
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
use Plack::Runner;
|
||||
my $app = sub {
|
||||
return [ 200,
|
||||
[ 'Content-Type' => 'text/html; charset=UTF-8' ],
|
||||
[ '<html><head><title>Goodbye, world!</title></head><body>Goodbye, world!</body></html>' ]
|
||||
]
|
||||
};
|
||||
my $runner = Plack::Runner->new;
|
||||
$runner->parse_options('--host' => 'localhost', '--port' => 8080);
|
||||
$runner->run($app);
|
||||
|
|
@ -0,0 +1 @@
|
|||
my $app = sub { return [ 200, [ 'Content-Type' => 'text/html; charset=UTF-8' ], [ '<html><head><title>Goodbye, world!</title></head><body>Goodbye, world!</body></html>' ] ] };
|
||||
|
|
@ -0,0 +1 @@
|
|||
plackup --host localhost --port 8080 script.psgi
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
(html 0 "Bye" NIL NIL
|
||||
"Goodbye, World!" )
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
def app(environ, start_response):
|
||||
start_response('200 OK', [])
|
||||
yield "Goodbye, World!"
|
||||
|
||||
if __name__ == '__main__':
|
||||
from wsgiref.simple_server import make_server
|
||||
server = make_server('127.0.0.1', 8080, app)
|
||||
server.serve_forever()
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
#lang racket
|
||||
(require web-server/servlet
|
||||
web-server/servlet-env)
|
||||
|
||||
(define (start req)
|
||||
(response/xexpr "Goodbye, World!"))
|
||||
|
||||
(serve/servlet start #:port 8080 #:servlet-path "/")
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
require 'webrick'
|
||||
server = WEBrick::HTTPServer.new(:Port => 8080)
|
||||
server.mount_proc('/') {|request, response| response.body = "Goodbye, World!"}
|
||||
trap("INT") {server.shutdown}
|
||||
server.start
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
require 'sinatra'
|
||||
get("/") { "Goodbye, World!" }
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
Smalltalk loadPackage:'stx:goodies/webServer'. "usually already loaded"
|
||||
|myServer service|
|
||||
|
||||
myServer := HTTPServer startServerOnPort:8082.
|
||||
service := HTTPPluggableActionService new.
|
||||
service
|
||||
register:[:request |
|
||||
self halt: 'debugging'.
|
||||
request reply:'<HTML><BODY><H1>Hello World</H1></BODY></HTML>'
|
||||
]
|
||||
as:'hello'.
|
||||
service linkNames:#('/' ).
|
||||
service registerServiceOn: myServer.
|
||||
myServer start.
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
proc accept {chan addr port} {
|
||||
while {[gets $chan] ne ""} {}
|
||||
puts $chan "HTTP/1.1 200 OK\nConnection: close\nContent-Type: text/plain\n"
|
||||
puts $chan "Goodbye, World!"
|
||||
close $chan
|
||||
}
|
||||
socket -server accept 8080
|
||||
vwait forever
|
||||
Loading…
Add table
Add a link
Reference in a new issue