目标:实现一个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
4. **协议支持**:除了基础的TCP/IP,Extended Socket Server可能支持其他协议,如HTTP、FTP或自定义协议,提供更丰富的功能。 5. **安全性增强**:通过整合SSL/TLS等加密技术,提供安全的数据传输,保护用户隐私和...
Socket.IO 支持多种传输机制,包括 WebSocket,HTTP long-polling 等,以确保在各种网络条件下都能保持连接的稳定性。 在给定的压缩包 "socket.io-server-cpp.tar.gz" 中,我们找到了 Socket.IO 的 C++ 实现。这个...
Perl-HTTP-Server-Simple是Perl编程语言中的一个轻量级Web服务器模块,它使得在Perl环境中快速搭建本地HTTP服务器变得简单易行。这个扩展包主要用于开发和测试用途,允许开发者在无需复杂配置的情况下,快速启动一个...
因此,对于新的项目,开发者可能需要考虑使用其他技术,如Server-Sent Events (SSE) 或者基于HTTP/2的Push技术来实现实时通信,这些技术在现代浏览器中有更好的支持且不需要Flash。 总的来说,"web-socket-js.zip...
Koa-socket-2 用于将socket.io连接到Koa实例的糖Koa-socket-2使用...安装npm i -S koa-socket-2HTTP示例请让世界变得更美好,并停止使用不安全的渠道。 但是,如果绝对必须这样做,那么以下内容将帮助您入门。 const K
SNESt-Socket-server是一个基于JavaScript的WebSocket服务器API,它允许开发者构建高性能、低延迟的实时应用。WebSocket是一种在客户端和服务器之间建立长期连接的协议,支持双向通信,即服务器和客户端都可以主动...
socket.emit('response', 'Server received your message!'); }); // 当客户端断开连接时 socket.on('disconnect', () => { console.log('Client disconnected'); }); }); ``` 在这个例子中,我们定义了一个...
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-...
C-Web-Server使用socket API进行网络编程,包括socket创建、bind、listen和accept等函数。这部分代码展示了如何建立服务器与客户端之间的TCP连接。 2. **HTTP协议解析**:接收到客户端的请求后,服务器需要解析HTTP...
首先,HPSocket是一款强大的网络通信组件,它提供了丰富的接口,支持多种协议(如TCP、UDP、HTTP等),并且具有高性能和易用性的特点。在本实例中,HPSocket被用作UDP客户端,用于接收服务器发送的数据。 UDP(User...
Socket socket = IO.socket("http://your-server-url:3000"); socket.connect(); socket.on("connect", new Emitter.Listener() { @Override public void call(Object... args) { Log.d("Socket", "Connected to...
"otm-socket-server"项目是一个基于JavaScript的网络通信服务器,专门用于实现Socket通信。Socket是一种网络编程中的接口,允许程序通过Internet进行双向通信。在本项目中,它被用作创建实时、低延迟的客户端-服务器...
smart-http 是一款可编程的 Http 应用微内核,基于smart-socket实现的轻量级http服务器,方便用户根据自身需求进行 Server 或 Client 的应用开发。支持GET、POST的 HTTP 请求。提供了 URL 路由组件,可以快速搭建...
【标题】"flutter-socket-server:快速乐队名称服务"是一个基于Flutter和Socket.IO技术构建的实时通信服务项目,主要用于在移动应用中实现快速查询和管理乐队名称。Flutter是Google推出的一种用于开发iOS和Android...
1. **网络编程基础**:C-Web-Server使用了C语言的socket编程接口,这是在操作系统层面进行网络通信的基础。socket API允许程序创建套接字,绑定到特定端口,监听连接,并处理客户端的请求。 2. **HTTP协议理解**:...
Log.e("HttpServer", "Error creating server socket", e); } ``` 当有客户端连接时,`accept()`方法会阻塞直到有新的连接请求到达。然后,我们可以通过返回的`Socket`对象与客户端进行通信: ```java Socket ...
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 socket = io('http://localhost:3000'); // 连接到服务器 socket.on('connect', () => { console.log('已连接到服务器:', socket.id); }); socket.on('message', (data) => { console.log('接收到...
var socket = io('http://yourserver.com'); socket.on('connect', function () { console.log('已连接'); socket.emit('my event', { data: 'Hello Server!' }); }); socket.on('my response', function ...