Libraryless. Click here for Pure Java version (2000L/16K/40K).
1 | !636 |
2 | |
3 | import android.widget.*; |
4 | import android.view.*; |
5 | import android.content.Context; |
6 | import android.app.Activity; |
7 | import java.util.*; |
8 | import java.io.*; |
9 | import java.net.*; |
10 | |
11 | import java.nio.ByteBuffer; |
12 | import java.nio.channels.FileChannel; |
13 | import java.nio.charset.Charset; |
14 | import java.security.KeyStore; |
15 | import java.text.SimpleDateFormat; |
16 | import java.util.logging.Level; |
17 | import java.util.logging.Logger; |
18 | import java.util.regex.Matcher; |
19 | import java.util.regex.Pattern; |
20 | import java.util.zip.GZIPOutputStream; |
21 | |
22 | import javax.net.ssl.KeyManager; |
23 | import javax.net.ssl.KeyManagerFactory; |
24 | import javax.net.ssl.SSLContext; |
25 | import javax.net.ssl.SSLServerSocket; |
26 | import javax.net.ssl.SSLServerSocketFactory; |
27 | import javax.net.ssl.TrustManagerFactory; |
28 | |
29 | class MyHTTPD extends NanoHTTPD {
|
30 | |
31 | /** |
32 | * Constructs an HTTP server on given port. |
33 | */ |
34 | public MyHTTPD(int port) throws IOException {
|
35 | super(port); |
36 | } |
37 | |
38 | |
39 | @Override |
40 | public Response serve( String uri, Method method, |
41 | Map<String, String> header, Map<String, String> parms, |
42 | Map<String, String> files ) |
43 | {
|
44 | System.out.println( method + " '222" + uri + "' " ); |
45 | String msg = "<html><body><h1>Hello server</h1>\n"; |
46 | if ( parms.get("username") == null )
|
47 | msg += |
48 | "<form action='?' method='get'>\n" + |
49 | " <p>Your name: <input type='text' name='username'></p>\n" + |
50 | "</form>\n"; |
51 | else |
52 | msg += "<p>Hello, " + parms.get("username") + "!</p>";
|
53 | |
54 | msg += "</body></html>\n"; |
55 | return newFixedLengthResponse(msg); |
56 | } |
57 | } |
58 | |
59 | public class main {
|
60 | private static MyHTTPD server; |
61 | private static int port = 8888; |
62 | |
63 | static class Lg {
|
64 | Activity context; |
65 | ScrollView sv; |
66 | TextView tv; |
67 | StringBuilder buf = new StringBuilder(); |
68 | |
69 | Lg(Activity context) {
|
70 | this.context = context; |
71 | sv = new ScrollView(context); |
72 | tv = new TextView(context); |
73 | tv.setText(buf.toString()); |
74 | sv.addView(tv); |
75 | } |
76 | |
77 | View getView() {
|
78 | return sv; |
79 | } |
80 | |
81 | void print(final String s) {
|
82 | context.runOnUiThread(new Runnable() {
|
83 | public void run() {
|
84 | buf.append(s); |
85 | tv.setText(buf.toString()); |
86 | } |
87 | }); |
88 | } |
89 | |
90 | void println(String s) {
|
91 | print(s + "\n"); |
92 | } |
93 | } |
94 | |
95 | static Lg lg; |
96 | |
97 | public static View main(final Activity context) {
|
98 | lg = new Lg(context); |
99 | |
100 | OutputStream outputStream = new OutputStream() {
|
101 | public void write(int b) {
|
102 | try {
|
103 | lg.print(new String(new byte[] {(byte) b}, "UTF-8")); // This is crap
|
104 | } catch (UnsupportedEncodingException e) {}
|
105 | } |
106 | |
107 | @Override |
108 | public void write(byte[] b, int off, int len) {
|
109 | try {
|
110 | lg.print(new String(b, off, len, "UTF-8")); // This is crap |
111 | } catch (UnsupportedEncodingException e) {}
|
112 | } |
113 | }; |
114 | |
115 | PrintStream ps = new PrintStream(outputStream, true); |
116 | System.setOut(ps); |
117 | System.setErr(ps); |
118 | |
119 | new Thread() {
|
120 | public void run() {
|
121 | try {
|
122 | // actual main program! |
123 | |
124 | server = new MyHTTPD(port); |
125 | server.start(); |
126 | System.out.println("HTTP server started (listening on port " + port + "!)");
|
127 | printMyIPs(); |
128 | |
129 | } catch (Throwable e) {
|
130 | e.printStackTrace(); |
131 | } |
132 | } |
133 | }.start(); |
134 | |
135 | return lg.getView(); |
136 | } |
137 | |
138 | static void printMyIPs() {
|
139 | String ip; |
140 | try {
|
141 | Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); |
142 | while (interfaces.hasMoreElements()) {
|
143 | NetworkInterface iface = interfaces.nextElement(); |
144 | // filters out 127.0.0.1 and inactive interfaces |
145 | if (iface.isLoopback() || !iface.isUp()) |
146 | continue; |
147 | |
148 | Enumeration<InetAddress> addresses = iface.getInetAddresses(); |
149 | while(addresses.hasMoreElements()) {
|
150 | InetAddress addr = addresses.nextElement(); |
151 | ip = addr.getHostAddress(); |
152 | System.out.println(iface.getDisplayName() + " " + ip); |
153 | } |
154 | } |
155 | } catch (Throwable e) {
|
156 | e.printStackTrace(); |
157 | } |
158 | } |
159 | } |
160 | |
161 | !include #1000433 // class NanoHTTP |
Began life as a copy of #1000432
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, exkalrxbqyxc, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1000435 |
| Snippet name: | Android web server test using NanoHTTPD on port 8888 |
| Eternal ID of this version: | #1000435/1 |
| Text MD5: | 7923b98f71e0548b79fb461609d212b0 |
| Transpilation MD5: | 0f9c6c48cc203fefe10f2cec16f32ac5 |
| Author: | stefan |
| Category: | javax android |
| Type: | JavaX source code (Android) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2015-08-06 00:39:19 |
| Source code size: | 4419 bytes / 161 lines |
| Pitched / IR pitched: | No / Yes |
| Views / Downloads: | 1391 / 1205 |
| Referenced in: | [show references] |