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
分享到:
相关推荐
用Python和TCP sockets手写了一个可以接收HEAD、GET和POST等request message的简单的 HTTP web服务器。
封装https/http的get/post使用函数DLL文件,方便使用者调用,有调用示例程序;另外还有两个ansi与Utf8的转换, 调用示例: PostHttpsContext("current.sinaapp.com","/post.php","name=rain&age=12"); 调用示例: ...
用HTML页面模拟测试get/post请求,psot请求参数的格式为json串
c# 运用get/post 和使用webservicec# 运用get/post 和使用webservicec# 运用get/post 和使用webservicec# 运用get/post 和使用webservice
VC++演示GET/POST发送请求的HTTP客户端,为了演示HTTP的客户编写的,因此运行时必须在本机有开HTTP服务才行。程序会会自动发送用户选择的请求类型,并跟踪这个请求,并返回信息在主窗体上。
Delphi两种方法演示HTTP请求:GET/POST方法使用演示,程序将演示使用这两种方法建立会话、建立一个http请求句柄、发送一个指定请求到httpserver、接收header信息和一个http请求、指向一个接收请求信息的缓冲区的指针...
C# http Get/POST请求封装类
主要实现HTTP POST/GET/PUT/DELETE等基本操作方式,此外还实现了代理、Header读取、HTML解析特定标签的属性值。
https://blog.csdn.net/myWorld001/article/details/109261850
GET 和 POST 是我们最常用的两种请求方式,今天讲一讲如何在 golang 服务中,正确接收这两种请求的参数信息。 处理GET请求 1.1 接收GET请求 //接收GET请求 func Get(writer http.ResponseWriter , request *...
C++ 实现 HTTP HTTPS POST GET(包含curl版本和winhttp两种实现)。 玩过抓包,网络协议分析的朋友肯定都知道http https post get,web端和用户的交互主要是通过post get完成的。 我这里有两种实现: 1:libcurl实现的...
LINUX C 下HTTP处理函数的POST以及GET的处理接口实现方法
一个关于Android客户端请求服务器端代码,涉及到Get/Post请求和Android中android-async-http-master插件的使用。
google翻译API Get/Post 调用无翻译内容长度限制 google翻译API Get/Post 调用无翻译内容长度限制 google翻译API Get/Post 调用无翻译内容长度限制
本文实例讲述了Go语言服务器开发实现最简单HTTP的GET与POST接口。分享给大家供大家参考。具体分析如下: Go语言提供了http包,可以很轻松的开发http接口。以下为示例代码: 代码如下:package webserver import...
C语言开发Linux下web服务器(支持GET/POST,SSL,目录显示等)
java发送http/https请求(get/post)代码,java 通过发送json,post请求,返回json数据的方法 java 通过发送json,post请求,返回json数据的方法
介绍如何通过HttpClient模块来创建Http连接,并分别以Http GET与Http POST方法来传递参数,连接之后取回Web Server的返回网页结果。重点是如何使用HttpClient的模块来完成Http的请求与应答。 分享参考自Android SDK...
C# 后台 使用Http协议获取GET / 推送POST 数据的通用类
HttpClient(用CloseableHttpClient发送get/post请求)