如何从HTTP服务器文件

编程入门 行业动态 更新时间:2024-10-14 16:25:47
本文介绍了如何从HTTP服务器文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有以下的Web服务器类中找到这里。我需要写一个Android应用程序(客户端),它可以检索该服务器中的文件。这将是巨大的,如果任何人都能够帮助我做到这一点。谢谢你。

I have the following web server class found here. I need to write an Android application(client) which can retrieve a file from this server. It would be great if anyone would be able to help me to do it. Thank you.

服务器主机地址是:MY-PC / ip地址

当我执行客户端它提供了一个例外。

When I execute the client it gives an exception.

java.ConnectException:连接被拒绝:连接

WebServer.Java

WebServer.Java

import java.io.*; import java.*; public class WebServer extends Thread { public WebServer() { this.start(); } private void displayString(String string) { //an alias to avoid typing so much! System.out.println(string); } private static final int UMBRA_PORT = 30480; private static final int ROOM_THROTTLE = 200; private InetAddress hostAddress; //this is a overridden method from the Thread class we extended from public void run() { //we are now inside our own thread separated from the gui. ServerSocket serversocket = null; //To easily pick up lots of girls, change this to your name!!! displayString("The simple httpserver v. 0000000000\nCoded by Jon Berg" + "<jon.berg[on server]turtlemeat>\n\n"); //Pay attention, this is where things starts to cook! try { //print/send message to the guiwindow displayString("Trying to bind to localhost on port " + Integer.toString(UMBRA_PORT) + "..."); //make a ServerSocket and bind it to given port, //serversocket = new ServerSocket(port); } catch (Exception e) { //catch any errors and print errors to gui displayString("\nFatal Error:" + e.getMessage()); return; } // Attempt to get the host address try { hostAddress = InetAddress.getLocalHost(); } catch(UnknownHostException e) { System.out.println("Could not get the host address."); return; } // Announce the host address System.out.println("Server host address is: "+hostAddress); // Attempt to create server socket try { serversocket = new ServerSocket(UMBRA_PORT,0,hostAddress); } catch(IOException e) { System.out.println("Could not open server socket."); return; } // Announce the socket creation System.out.println("Socket "+serversocket+" created."); displayString("OK!\n"); //go in a infinite loop, wait for connections, process request, send response while (true) { displayString("\nReady, Waiting for requests...\n"); try { //this call waits/blocks until someone connects to the port we //are listening to Socket connectionsocket = serversocket.accept(); //figure out what ipaddress the client commes from, just for show! InetAddress client = connectionsocket.getInetAddress(); //and print it to gui displayString(client.getHostName() + " connected to server.\n"); //Read the http request from the client from the socket interface //into a buffer. BufferedReader input = new BufferedReader(new InputStreamReader(connectionsocket. getInputStream())); //Prepare a outputstream from us to the client, //this will be used sending back our response //(header + requested file) to the client. DataOutputStream output = new DataOutputStream(connectionsocket.getOutputStream()); //as the name suggest this method handles the http request, see further down. //abstraction rules http_handler(input, output); } catch (Exception e) { //catch any errors, and print them displayString("\nError:" + e.getMessage()); } } //go back in loop, wait for next request } //our implementation of the hypertext transfer protocol //its very basic and stripped down private void http_handler(BufferedReader input, DataOutputStream output) { int method = 0; //1 get, 2 head, 0 not supported String http = new String(); //a bunch of strings to hold String path = new String(); //the various things, what http v, what path, String file = new String(); //what file String user_agent = new String(); //what user_agent try { //This is the two types of request we can handle //GET /index.html HTTP/1.0 //HEAD /index.html HTTP/1.0 String tmp = input.readLine(); //read from the stream String tmp2 = new String(tmp); tmp.toUpperCase(); //convert it to uppercase if (tmp.startsWith("GET")) { //compare it is it GET method = 1; } //if we set it to method 1 if (tmp.startsWith("HEAD")) { //same here is it HEAD method = 2; } //set method to 2 if (method == 0) { // not supported try { output.writeBytes(construct_http_header(501, 0)); output.close(); return; } catch (Exception e3) { //if some error happened catch it displayString("error:" + e3.getMessage()); } //and display error } //} //tmp contains "GET /index.html HTTP/1.0 ......." //find first space //find next space //copy whats between minus slash, then you get "index.html" //it's a bit of dirty code, but bear with me... int start = 0; int end = 0; for (int a = 0; a < tmp2.length(); a++) { if (tmp2.charAt(a) == ' ' && start != 0) { end = a; break; } if (tmp2.charAt(a) == ' ' && start == 0) { start = a; } } path = tmp2.substring(start + 2, end); //fill in the path } catch (Exception e) { displayString("errorr" + e.getMessage()); } //catch any exception //path do now have the filename to what to the file it wants to open displayString("\nClient requested:" + new File(path).getAbsolutePath() + "\n"); FileInputStream requestedfile = null; try { //try to open the file, requestedfile = new FileInputStream(path); } catch (Exception e) { try { //if you could not open the file send a 404 output.writeBytes(construct_http_header(404, 0)); //close the stream output.close(); } catch (Exception e2) {} displayString("error" + e.getMessage()); } //print error to gui //happy day scenario try { int type_is = 0; //find out what the filename ends with, //so you can construct a the right content type if (path.endsWith(".zip") ) { type_is = 3; } if (path.endsWith(".jpg") || path.endsWith(".jpeg")) { type_is = 1; } if (path.endsWith(".gif")) { type_is = 2; } if (path.endsWith(".ico")) { type_is = 4; } if (path.endsWith(".xml")) { type_is = 5; } //write out the header, 200 ->everything is ok we are all happy. output.writeBytes(construct_http_header(200, 5)); //if it was a HEAD request, we don't print any BODY if (method == 1) { //1 is GET 2 is head and skips the body byte [] buffer = new byte[1024]; while (true) { //read the file from filestream, and print out through the //client-outputstream on a byte per byte base. int b = requestedfile.read(buffer, 0,1024); if (b == -1) { break; //end of file } output.write(buffer,0,b); } //clean up the files, close open handles } output.close(); requestedfile.close(); } catch (Exception e) {} } //this method makes the HTTP header for the response //the headers job is to tell the browser the result of the request //among if it was successful or not. private String construct_http_header(int return_code, int file_type) { String s = "HTTP/1.0 "; //you probably have seen these if you have been surfing the web a while switch (return_code) { case 200: s = s + "200 OK"; break; case 400: s = s + "400 Bad Request"; break; case 403: s = s + "403 Forbidden"; break; case 404: s = s + "404 Not Found"; break; case 500: s = s + "500 Internal Server Error"; break; case 501: s = s + "501 Not Implemented"; break; } s = s + "\r\n"; //other header fields, s = s + "Connection: close\r\n"; //we can't handle persistent connections s = s + "Server: SimpleHTTPtutorial v0\r\n"; //server name switch (file_type) { //plenty of types for you to fill in case 0: break; case 1: s = s + "Content-Type: image/jpeg\r\n"; break; case 2: s = s + "Content-Type: image/gif\r\n"; break; case 3: s = s + "Content-Type: application/x-zip-compressed\r\n"; break; case 4: s = s + "Content-Type: image/x-icon\r\n"; case 5: s = s + "Content-Type: text/xml\r\n"; break; default: s = s + "Content-Type: text/html\r\n"; break; } ////so on and so on...... s = s + "\r\n"; //this marks the end of the httpheader //and the start of the body //ok return our newly created header! return s; } }

Client.Java

Client.Java

public class WatchMeManagerClient { private static Socket socket; private static PrintWriter printWriter; public static void main(String[] args) throws Exception { try { URL url; URLConnection urlConn; DataInputStream dis; url = new URL("ipaddress/xml/userGroup.xml"); urlConn = url.openConnection(); urlConn.setDoInput(true); urlConn.setUseCaches(false); dis = new DataInputStream(urlConn.getInputStream()); String s; while ((s = dis.readLine()) != null) { System.out.println(s); } dis.close(); } catch (MalformedURLException mue) { System.out.println(mue.toString()); } catch (IOException ioe) { System.out.println(ioe.toString()); } } }

当我在PC上运行code它的作品。但是,当我尝试执行它在Android设备它提供了以下错误。

When I run the code on PC it works. But when I try to execute it on the Android Device it gives following errors.

推荐答案

这样的问题,要么是由以下原因之一:

Such problems are either due to one of the following:

  • 该港口是错误的。

  • The port is wrong

    防火墙阻止它。

  • 更多推荐

    如何从HTTP服务器文件

    本文发布于:2023-10-11 14:17:59,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1481945.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:服务器   文件   HTTP

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!