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: | 1128 / 894 |
Referenced in: | [show references] |