A
ageofempires
App-Anbieter (kostenlos)
- 8
Hallo zusammen,
Ich versuche eine Server Socket auf dem Android zu erstellen, welcher auf http anfragen reagiert und anschließend eine Internetseite mir im Browser da stellt. Ich möchte eine App in der Art erstellen wie Kiesair oder Airdorid. Dazu fehlt mir leider nur noch die Ansicht im Browser.
Hab auch schon einiges ausprobiert und gelesen.Aber ich bin mittlerweile ratlos und hoffe Ihr könnt mir sagen was ich falsch gemacht habe.
Hier der Quellcode:
Main Klasse:
Klasse WebServerService
Klasse Webserver:
Klasse HomeCommandHandler:
Im Browser gebe ich die IP adresse und den port ein (192.168.1.7:8080)
Wünsche euch noch einen schönen Tag und danke schon mal
ageofempires
Ich versuche eine Server Socket auf dem Android zu erstellen, welcher auf http anfragen reagiert und anschließend eine Internetseite mir im Browser da stellt. Ich möchte eine App in der Art erstellen wie Kiesair oder Airdorid. Dazu fehlt mir leider nur noch die Ansicht im Browser.
Hab auch schon einiges ausprobiert und gelesen.Aber ich bin mittlerweile ratlos und hoffe Ihr könnt mir sagen was ich falsch gemacht habe.
Hier der Quellcode:
Main Klasse:
private Button startServerButton;
private TextView status;
private Context contextServer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contextServer = this;
startServerButton = (Button) findViewById(R.id.button1);
status = (TextView) findViewById(R.id.textView1);
startServerButton.setText("Server Starten");
startServerButton.setOnClickListener(serverEvent);
status.setText("Server Off");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
OnClickListener serverEvent = new OnClickListener() {
@Override
public void onClick(View arg0) {
status.setText("Server läuft");
Thread t = new Thread(){
public void run(){
startService(new Intent(MainActivity.this, WebServerService.class));
};
};
t.start();
}
};
}
Klasse WebServerService
package server;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class WebServerService extends Service {
private WebServer server = null;
@Override
public void onCreate() {
Log.i("HTTPSERVICE", "Creating and starting httpService");
super.onCreate();
server = new WebServer(this);
server.startServer();
}
@Override
public void onDestroy() {
Log.i("HTTPSERVICE", "Destroying httpService");
server.stopServer();
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
Klasse Webserver:
package server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import org.apache.http.HttpException;
import org.apache.http.impl.DefaultConnectionReuseStrategy;
import org.apache.http.impl.DefaultHttpResponseFactory;
import org.apache.http.impl.DefaultHttpServerConnection;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.BasicHttpProcessor;
import org.apache.http.protocol.HttpRequestHandlerRegistry;
import org.apache.http.protocol.HttpService;
import org.apache.http.protocol.ResponseConnControl;
import org.apache.http.protocol.ResponseContent;
import org.apache.http.protocol.ResponseDate;
import org.apache.http.protocol.ResponseServer;
import android.content.Context;
public class WebServer {
public static boolean RUNNING = false;
public static int serverPort = 8080;
private static final String HOME_PATTERN = "/home.html";
private Context context = null;
private BasicHttpProcessor httpproc = null;
private BasicHttpContext httpContext = null;
private HttpService httpService = null;
private HttpRequestHandlerRegistry registry = null;
public WebServer(Context context) {
this.setContext(context);
httpproc = new BasicHttpProcessor();
httpContext = new BasicHttpContext();
httpproc.addInterceptor(new ResponseDate());
httpproc.addInterceptor(new ResponseServer());
httpproc.addInterceptor(new ResponseContent());
httpproc.addInterceptor(new ResponseConnControl());
httpService = new HttpService(httpproc,
new DefaultConnectionReuseStrategy(), new DefaultHttpResponseFactory());
registry = new HttpRequestHandlerRegistry();
registry.register(HOME_PATTERN, new HomeCommandHandler(context));
httpService.setHandlerResolver(registry);
}
private ServerSocket serverSocket;
public void runServer() {
try {
serverSocket = new ServerSocket(serverPort);
serverSocket.setReuseAddress(true);
while (RUNNING) {
try {
final Socket socket = serverSocket.accept();
DefaultHttpServerConnection serverConnection = new DefaultHttpServerConnection();
serverConnection.bind(socket, new BasicHttpParams());
httpService.handleRequest(serverConnection, httpContext);
serverConnection.shutdown();
} catch (IOException e) {
e.printStackTrace();
} catch (HttpException e) {
e.printStackTrace();
}
}
serverSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
RUNNING = false;
}
public synchronized void startServer() {
RUNNING = true;
runServer();
}
public synchronized void stopServer() {
RUNNING = false;
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void setContext(Context context) {
this.context = context;
}
public Context getContext() {
return context;
}
}
Klasse HomeCommandHandler:
package server;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.entity.ContentProducer;
import org.apache.http.entity.EntityTemplate;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpRequestHandler;
import android.content.Context;
public class HomeCommandHandler implements HttpRequestHandler {
private Context context = null;
public HomeCommandHandler(Context context) {
this.context = context;
}
@Override
public void handle(HttpRequest request, HttpResponse response,
HttpContext httpContext) throws HttpException, IOException {
HttpEntity entity = new EntityTemplate(new ContentProducer() {
public void writeTo(final OutputStream outstream) throws IOException {
OutputStreamWriter writer = new OutputStreamWriter(outstream, "UTF-8");
String resp = "<html><head></head><body><h1>Home<h1><p>This is the homepage.</p></body></html>";
writer.write(resp);
writer.flush();
}
});
response.setHeader("Content-Type", "text/html");
response.setEntity(entity);
}
public Context getContext() {
return context;
}
}
Im Browser gebe ich die IP adresse und den port ein (192.168.1.7:8080)
Wünsche euch noch einen schönen Tag und danke schon mal
ageofempires
Zuletzt bearbeitet: