目标:实现一个http协议的demo服务器
实现:启动一个ServerSocket,监听特定端口,然后浏览器请求,返回页面
代码实现:
package com.socket.bio.socket; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** * @author xinchun.wang */ public class HttpServer { private static final int PORT = 9111; public static void main(String[] args) { System.out.println("服务器启动...\n"); HttpServer server = new HttpServer(); server.init(); } public void init() { try { ServerSocket serverSocket = new ServerSocket(PORT); while (true) { // 一旦有堵塞, 则表示服务器与客户端获得了连接 Socket client = serverSocket.accept(); // 处理这次连接 new HandlerThread(client); } } catch (Exception e) { System.out.println("服务器异常: " + e.getMessage()); } } private class HandlerThread implements Runnable { private Socket socket; public HandlerThread(Socket client) { socket = client; new Thread(this).start(); } public void run() { try { // 读取客户端数据 byte[] data = new byte[1024*2]; InputStream input = socket.getInputStream(); int ret = input.read(data);// 这里要注意和客户端输出流的写方法对应,否则会抛 System.out.println("客户端发过来的内容:" + new String(data)); while (ret>1024*2) { System.out.println("客户端发过来的内容:" + new String(data)); ret = input.read(data); } if(!new String(data).contains("GET")){ input.close(); socket.close(); return; } // 向客户端回复信息 OutputStream out = socket.getOutputStream(); // 发送键盘输入的一行 StringBuilder result = new StringBuilder(); result.append("HTTP/1.1 200 OK"); result.append("\r\n"); result.append("Server: Apache-Coyote/1.1"); result.append("\r\n"); result.append("Set-Cookie: JSESSIONID=613C816BEC2DB87DB7A043574B68AA57; Path=/"); result.append("\r\n"); result.append("Content-Type: text/html;charset=ISO-8859-1"); result.append("\r\n"); result.append("Content-Length: 293"); result.append("\r\n"); result.append("Date: Tue, 25 Apr 2017 02:58:49 GMT"); result.append("\r\n"); result.append("Connection: close"); result.append("\r\n"); //非常重要,换行下面是response的数据信息 //如果没有下面这个换行,浏览器无法识别http的response报文 result.append("\r\n"); //数据body部分,也即浏览器上显示的东西 result.append("<html>"); result.append("hello world"); result.append("</html>"); System.out.println(result); out.write(result.toString().getBytes()); out.close(); input.close(); } catch (Exception e) { System.out.println("服务器 run 异常: " + e.getMessage()); } finally { if (socket != null) { try { socket.close(); } catch (Exception e) { socket = null; System.out.println("服务端 finally 异常:" + e.getMessage()); } } } } } }
服务器端输出http请求的报文和返回的报文:
客户端发过来: GET /index.html HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */* Accept-Language: zh-CN User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3) UA-CPU: AMD64 Accept-Encoding: gzip, deflate Host: 127.0.0.1:9111 Connection: Keep-Alive Cookie: JSESSIONID=613C816BEC2DB87DB7A043574B68AA57 返回的报文: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Set-Cookie: JSESSIONID=613C816BEC2DB87DB7A043574B68AA57; Path=/ Content-Type: text/html;charset=ISO-8859-1 Content-Length: 293 Date: Tue, 25 Apr 2017 02:58:49 GMT Connection: close <html>hello world</html>
浏览器请求效果:
相关推荐
套接字服务器。 提供用于初始化并连接到socket.io服务器的简单抽象。 此模块创建一个单例对象,该对象公开使用现有的http服务器对象...// Initialize socket server.socket . init ( server ) ;// Initialize http ser
Koa-socket-2 用于将socket.io连接到Koa实例的糖Koa-socket-2使用...安装npm i -S koa-socket-2HTTP示例请让世界变得更美好,并停止使用不安全的渠道。 但是,如果绝对必须这样做,那么以下内容将帮助您入门。 const K
perl-HTTP-Tiny-0.033-3.el7.noarch.rpm perl-libs-5.16.3-294.el7_6.x86_64.rpm perl-macros-5.16.3-294.el7_6.x86_64.rpm perl-parent-0.225-244.el7.noarch.rpm perl-PathTools-3.40-5.el7.x86_64.rpm perl-Pod-...
proxy_pass http://nacos-server; } } 4、启动集群, 写个脚本批量启动 startup_all.bat, 脚本代码如下 start startup.cmd -m -i 192.168.1.2 -p 8848 start startup.cmd -m -i 192.168.1.2 -p 8849 ...
套接字文件 在帮助下进行文件处理。...const server = http . createServer ( app ) ; const socket = io . listen ( server ) ; server . listen ( port , ip ) ; socketFile ( socket , { prefix : 'edwar
构建: go build socket-activated-http-server.go这是运行带有 systemd 套接字激活的 http go 应用程序的示例。 我还包含了一个关于如何使用(本示例为 6.5M)的参考。 要尝试此操作,只需抓住容器并执行以下操作:...
Socket.IO聊天服务器如何使用$ git clone https://github.com/matiastucci/socket-chat-server.git$ cd socket-chat-server$ npm install$ node server.js将浏览器指向http://localhost:8080 。 (可选)通过提供...
计算机网络实验SOCKET编程----WEB服务器[C#版本].rar计算机网络实验SOCKET编程----WEB服务器[C#版本].rar
在andriod下实现一个间的socket server 安装以后可以通过,浏览器访问/mnt/sdcard/IDATACHINA文件夹下的html文件
使用TCPServer编写(多线程)socket服务 http://blog.csdn.net/ghostfromheaven/article/details/8653421
非常牛的代码,用VC通过HTTP把文件直接传到WEB服务器上,可以在开发木马的朋友会用到。用的是MFC中的一个类,HTTP,分析SOCKET协议。模仿HTTP上传文件。通过80端口上传,可有效避开防火墙等。
敝人近期整理的客户端与服务端通信实例,数据编码约定采用UTF-8编码,解决中文乱码问题.ServerSocket组件可以同时接受一个或多个ClientSocket组件的连接请求,并与每个ClientSocket组件建立单独的连接,进行单独的...
npm install socket.io 开发单位: npm install @types/express --save-dev npm install @types/cors --save-dev npm install @types/socket.io --save-dev 重建节点模块 npm install 生成DIST并听所有更改 tsc -w ...
使用套接字API的简单Java HTTP Server 如何: 将user.sql脚本运行到H2 DB中(地址必须为'jdbc:h2:〜/ test') 启动MainClass应用程序 要调用HTTP方法GET(例如,在cURL中),请键入“ curl -X GET ” 要调用...
$ node server.js 接下来,如果您想从智能手机访问它,您必须使用您的 IP 地址更改socket-tetris/public/desktop/js/app.js和socket-tetris/public/mobile/js/services.js的baseUrl变量. 然后,将浏览器指向...
linux环境 c++实现的httpserver, 包含tcpserver、tcpclient,其中tcpserver包含单线程、多线程、select模式、线程池、epool等几种实现
用法安装: npm install uservices-socket.io.-server基本用法:(有关如何创建uService规范的示例,请参见uServices项目) import { createLocalProxy } from 'uservices-socket.io-server'let httpServer = http ....
Java套接字HTTP服务器使用Java实现的具有URL映射功能的套接字http... “ server.accept()”获取请求,“ server.sendResponse()”基于网址模式从映射发送响应。 下图显示了浏览器中“ ”的输出: 下图显示了ap
一个应用linux socket 编程的http web server 基于 ip/tcp 协议
http-websocket-server 具有websocket路由的简单命令行http服务器。 使用socket.io作为websocket框架构建,并添加了一层以简化客户端通信。 通过客户端通信快速构建站点,而无需编写任何服务器代码。安装使用npm全局...