`
java2000.net
  • 浏览: 651287 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

一个简单的Socket实现的HTTP响应服务器(GET/POST/UPLOAD)

    博客分类:
  • JAVA
阅读更多
package test.io;

import java.net.*;
import java.io.*;

/**
 * 一个简单的Socket实现的HTTP响应服务器。<br>
 * 只用于熟悉HTTP协议的目的,可以看到浏览器发过来的数据格式。
 * 
 * @author 赵学庆 www.java2000.net
 */
public class MyWebServer {
  public static void main(String[] args) {
    Socket socket = null;
    try {
      // 创建一个监听8000端口的服务器Socket
      ServerSocket s = new ServerSocket(8000, 3);
      System.out.println("MyWebServer等待来自浏览器的连接\n");
      while (true) {
        socket = s.accept();
        System.out.println("连接已建立。端口号:" + socket.getPort());
        new MyWebServerThread(socket).start();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

class MyWebServerThread extends Thread {
  private Socket socket;

  MyWebServerThread(Socket socket) {
    this.socket = socket;
  }

  @Override
  public void run() {
    try {
      InputStreamReader is = new InputStreamReader(socket.getInputStream());
      char[] bs = new char[2048];
      PrintStream out;
      out = new PrintStream(socket.getOutputStream());
      StringBuilder msg = new StringBuilder();
      // 如果10毫秒还没有数据,则视同没有新的数据了。
      // 因为有Keep-Alive的缘故,浏览器可能不主动断开连接的。
      // 实际应用,会根据协议第一行是GET还是 POST确定。
      socket.setSoTimeout(10);
      //
      // 此处读入请求数据并做相应的处理
      //
      int len = -1;
      try {
        while ((len = is.read(bs)) != -1) {
          msg.append(bs, 0, len);
          msg.append("\n");
        }
      } catch (Exception ex) {
        // ex.printStackTrace();
      }
      // 下面是由服务器直接生成的主页内容
      // 1、首先向浏览器输出响应头信息
      out.println("HTTP/1.1 200 OK");
      out.println("Content-Type:text/html;charset:GBK");
      out.println();
      // 2、输出主页信息
      out
          .println("<HTML><BODY>"
              + "<center>"
              + "<H1>HTTP协议测试服务器,当前时间:"
              + new java.util.Date()
              + "</h1>"
              + "<form method='get'>username:<input type='text' name='username'/>password:<input type='text' name='password'/><input type='submit' value='GET测试'/></form><br/>"
              + "<form method='post'>username:<input type='text' name='username'/>password:<input type='text' name='password'/><input type='submit' value='POST测试'/></form><br/>"
              + "<form method='post'  enctype='multipart/form-data'>phototitle:<input type='text' name='phototitle'/>photo:<input type='file' name='photo'/><input type='submit' value='Upload测试'/></form>"
              + "</center>您提交的数据如下:<pre>" + msg.toString() + "</pre></BODY></HTML>");
      out.flush();
      out.close();
      is.close();
      System.out.println("close");
      // 关闭连接
      socket.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

 

原文地址:http://www.java2000.net/p9925

1
1
分享到:
评论

相关推荐

    C#实现http协议GET、POST请求

    接着定义了一个 `NameValueCollection` 对象用来存储要提交的数据,然后调用 `UploadValues` 方法发送 POST 请求并将服务器响应的数据打印出来。 #### 文件上传 除了普通的 POST 请求外,文件上传也是常见的一种...

    【JavaScript源代码】解决vue $http的get和post请求跨域问题.docx

    Vue.js 是一个流行的前端框架,用于构建用户界面。在开发过程中,经常遇到跨域问题,因为浏览器的安全策略限制了不同源的HTTP请求。Vue.js 的官方推荐插件 Axios 通常用于处理HTTP请求,但默认情况下,它也会受到...

    网络请求框架----HttpClient的get,post和图片上传服务器

    在HttpClient中,我们可以使用`HttpGet`类来创建一个GET请求: ```java // 创建HttpGet对象,指定URL HttpGet httpGet = new HttpGet("http://example.com/api/data"); // 设置HttpClient对象 CloseableHttpClient...

    android http post/get

    以下是一个使用HttpURLConnection的简单示例: ```java URL url = new URL("http://example.com/data"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod...

    C++实现http的post发送接收数据以及xml解析

    在提供的文件列表中,`http2.sln`是一个Visual Studio解决方案文件,很可能包含了实现上述功能的项目。`http2`可能是源代码文件,里面可能包含了具体的C++实现。通过打开并研究这个项目,你可以更直观地学习如何将...

    C# send post&get

    文件 `HttpProc.cs` 是一个用于处理 HTTP 请求(GET 和 POST)的类库。它提供了多种方法来发送请求、下载文件、上传文件等。此文件由 He Daode 创建于 2007 年 9 月 1 日,主要用于实现 HTTP 协议中的 GET 和 POST ...

    模拟post,get的登陆

    本主题聚焦于如何在C#环境下实现HTTP POST和GET方法的模拟登录,以完成与服务器端的交互。以下是对这个知识点的详细阐述: 首先,我们需要理解HTTP的基本概念。HTTP(超文本传输协议)是互联网上应用最广泛的一种...

    c++实现向web服务器上传文件

    libcurl是一个强大的URL传输库,支持多种协议,包括HTTP。首先,需要在VS2013项目中添加libcurl库的依赖,并配置相应的头文件路径和链接器设置。 下面是一段基本的C++代码示例,展示如何使用libcurl上传文件: ```...

    php利用fsockopen GET/POST提交表单及上传文件

    这里,文件名被封装在POST数据中,使用`@`前缀表示这是一个文件。需要注意的是,`fsockopen`并不直接支持文件上传,而是将整个文件内容作为字符串传递。因此,服务器端需要正确解析并保存文件。 在服务器端,例如`...

    AsyncHttpClient(get和post提交)

    AsyncHttpClient 是一个强大的异步HTTP客户端库,广泛用于Android和Java应用中,它允许开发者以非阻塞的方式发送HTTP请求并处理响应。这个库的主要优点是性能高效、线程安全并且易于使用。在这个主题中,我们将深入...

    android 网络编程 客户端完整代码 socket http

    本文将深入探讨Android中基于Socket和HTTP的网络编程,包括它们的概念、实现方式以及如何构建一个完整的客户端代码。 1. Socket(套接字)网络编程: Socket是网络通信的基础,它提供了进程间通信的能力,使得运行...

    pythonPost请求处理和get请求.zip

    在上面的代码中,`requests.get()`函数向指定URL发送GET请求,返回一个`Response`对象,其中包含了服务器的响应。`response.text`属性则可以获取服务器返回的文本内容。 2. POST请求 POST请求常用于向服务器提交...

    Node.js Express框架GET、POST、COOKIE、上传、数据库等测试实例

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行开发。Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供了一系列强大的特性,...

    C# 以Post方式提交数据

    以下将详细解析如何使用C#实现POST请求,包括构造请求、设置参数、发送数据及处理响应。 ### C# POST请求的基本流程 1. **创建HTTP Web请求对象**:首先,需要创建一个`HttpWebRequest`对象,这可以通过调用`...

    08-01 OKHttp3的post和get请求

    上述代码创建了一个`OkHttpClient`实例,构建了一个GET请求,并执行该请求得到响应。`execute()`方法会同步阻塞直到服务器返回响应。 ### POST请求 POST请求用于向服务器发送数据。在OKHttp3中,可以通过`Request...

    AFN Demo(GET,POST,上传,下载,断点续传,网络检测).zip

    "AFN Demo(GET,POST,上传,下载,断点续传,网络检测).zip"这个压缩包文件包含了一个关于AFNetworking的示例项目,展示了其核心功能,包括GET和POST请求、文件上传和下载以及断点续传和网络状态检测。...

    基于boost.asio库的C++http/https web server

    在这个项目中,我们看到一个使用Boost.ASIO实现的Web服务器,它同时支持HTTP和HTTPS协议,这对于创建安全的Web服务至关重要。 首先,我们需要理解Boost.ASIO库的核心概念。ASIO代表Asynchronous Service Input/...

    testUpload上传下载实例

    这个"testUpload上传下载实例"是一个Java实现的项目,它提供了一种有效处理文件上传和下载的方法。下面我们将深入探讨相关知识点。 1. **Java上传下载原理**: Java通过HTTP协议实现文件上传和下载。HTTP协议提供...

    android中http协议连接服务器事例

    总结起来,在Android应用中,通过HTTP的GET和POST方法可以实现与服务器的双向通信。GET用于简单地获取信息,而POST则用于提交数据,包括文件上传。使用HttpURLConnection或第三方库如OkHttp可以简化这些操作,让...

Global site tag (gtag.js) - Google Analytics