本示例源于为朋友解决一个小问题,数据库到服务器的数据传输,由于本人能力有限,暂时将它理解为从数据库中获取数取表数据,实际上有可能是文件或者其他形式的数据,不过原理都得用流传输,

首先httpclient

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import netscape.javascript.JSObject; import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* Created by jisen on 2018/5/24.
*/
public class Httpclient {
public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException {
String dataByJDBC = getDataByJDBC();
//如果不从数据库取直接发送字符串
//String dataByJDBC="hello httpserver";
String backData = httpPost(dataByJDBC); System.out.println(backData);
} //获取数据库的数据并封装成json字符串
public static String getDataByJDBC() throws ClassNotFoundException, SQLException { String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/admin?useSSL=false";
String username = "root";
String password = "root";
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, username, password); //从数据库中获取数据
String sql = "select * from menu";
PreparedStatement preparedStatement = connection.prepareStatement(sql);//预处理说起来 ResultSet resultSet = preparedStatement.executeQuery();
int columnCount = resultSet.getMetaData().getColumnCount();
ResultSetMetaData metaData = resultSet.getMetaData();
Map<String,Object> dataMap = new HashMap<String,Object>();
List<Map<String,Object>> list = new ArrayList<>();
while (resultSet.next()){
for(int i=1 ; i<=columnCount;i++){
String columnName = metaData.getColumnName(i);
Object object = resultSet.getObject(i);
dataMap.put(columnName,object);
}
list.add(dataMap);
} String jsonString = JSON.toJSONString(list);
System.out.println(jsonString);
return jsonString;
} public static String httpGet() throws IOException {
URL url = new URL("http://localhost:8080/httpServer?param1=jisen&param2=jisen2");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.connect();
//接收反馈
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer sBuffer = new StringBuffer();
String line = "";
while ((line = reader.readLine())!=null){
sBuffer.append(line).append("\r\n");
}
reader.close();
return sBuffer.toString();
} public static String httpPost(String data) throws IOException {
URL url = new URL("http://localhost:8080/httpServer");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
//HttpURLConnection中的doInput默认为true,而doOutput默认为false,所以如果需要些内容到流,需要设置为true
conn.setDoOutput(true);
conn.connect();
//写入流,发送Http请求
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
conn.getOutputStream()));
writer.write(data);
writer.flush(); //接收反馈
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream(),"utf8"));
StringBuffer sBuffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
sBuffer.append(line).append("\r\n");
}
reader.close();
return sBuffer.toString();
}
} 其次httpserver
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.URI;
import java.util.HashMap;
import java.util.Map; /**
* Created by jisen on 2018/5/24.
*/
public class MyHttpServer { public static void main(String[] args) throws IOException {
HttpServer httpServer = HttpServer.create(new InetSocketAddress(8080),10);
httpServer.createContext("/httpServer", new MyHandler());
httpServer.setExecutor(null);
httpServer.start();
}
static class MyHandler implements HttpHandler {
public void handle(HttpExchange he) throws IOException { InputStream is = he.getRequestBody();
//接收反馈
BufferedReader reader = new BufferedReader(new InputStreamReader(
is,"utf8")); StringBuffer sBuffer = new StringBuffer(); String line = "";
while ((line = reader.readLine()) != null) {
sBuffer.append(line).append("\r\n");
}
reader.close();
is.close();
System.out.println("接收到来自数据库的数据");
System.out.println(sBuffer);
//服务器收到
String response = "the data is receive";
he.sendResponseHeaders(200, response.length());
OutputStream os = he.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}
												

http通信示例Httpclient和HttpServer的更多相关文章

  1. android http 通信(httpclient 实现)

    1.httpclient get 方式 HttpGet httpGet = new HttpGet(url); HttpClient client = new DefaultHttpClient(); ...

  2. C#上位机之—WinForm实现串口通信示例

    上位机开发常用到串口通信来控制设备,串口通信的主要参数:COM口,波特率(9600),停止位(One),数据位(8),校验位(None),括号中的是常用值,具体意思我也不太懂,会用能实现功能就行哈哈: ...

  3. [ActionScript 3.0] 两个AIR之间的通信示例LocalConnection

    发送方AIR程序: package { import flash.display.DisplayObjectContainer; import flash.display.Sprite; import ...

  4. 使用AF_INET实现点对点的通信示例

    作者:Younger Liu,本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. 1.    客户端(发送方) 操作流如下: (1) 使用AF_INET协议簇, ...

  5. lua 中 socket 通信示例

    server.lua #!/usr/bin/lua local socket = require("socket") host, port = "127.0.0.1&qu ...

  6. Java Socket通信示例

    Socket分为ServerSocket和Socket两大类: 其中ServerSocket用于服务器端,可以通过accept方法监听请求,监听到请求后返回Socket: Socket用户具体完成数据 ...

  7. Windows7下驱动开发与调试体系构建——2.R3与R0的通信示例

    目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 在阅读本节前,建议先阅读<Windows内核安全与驱动开发>第五章内容, ...

  8. java netty socket库和自定义C#socket库利用protobuf进行通信完整实例

    之前的文章讲述了socket通信的一些基本知识,已经本人自定义的C#版本的socket.和java netty 库的二次封装,但是没有真正的发表测试用例. 本文只是为了讲解利用protobuf 进行C ...

  9. iOS开发多线程篇—线程间的通信

    iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任 ...

随机推荐

  1. 013-在 Shell 脚本中调用另一个 Shell 脚本的三种方式

    如下: fork: 如果脚本有执行权限的话,path/to/foo.sh.如果没有,sh path/to/foo.sh. exec: exec path/to/foo.sh source: sourc ...

  2. 【翻译】Flink Table Api & SQL —Streaming 概念 ——在持续查询中 Join

    本文翻译自官网 :  Joins in Continuous Queries   https://ci.apache.org/projects/flink/flink-docs-release-1.9 ...

  3. [LeetCode] 325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组

    Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...

  4. Oracle通过命令导入数据存储文件

    imp ztdev/ztdev FROMUSER=zt_base TOUSER=ztdev file=/home/oracle/zt_base_1023_sc_kk_new.dmp log=zt_ba ...

  5. java开发异常Exception集锦

    背景:整理开发过程中的异常问题 java.lang.Exception: No tests found matching 一般出现在新导入的工程中.在sts中通过open project的方式导入工程 ...

  6. 使用objcopy实现将文件编译进执行程序

    一.简介  工作中可能遇到将一个文件编译进执行程序的需求,例如bin文件.jpg文件等等.实现的方法可以使用脚本来将文件内容写入一个新的C源文件数组,达成编译进程序的目的. 现在介绍一种简单.快捷的方 ...

  7. Windows下mysql安装配置问题

    下载最新版的mysql: https://dev.mysql.com/downloads/mysql/ 下载完成后解压打开安装包如下 打开cmd以管理员身份运行(一定要以管理员身份运行) 然后输入命令 ...

  8. Centos下Redis集群的搭建实现读写分离

    Centos下Redis一主多从架构搭建 搭建目标:因为自己笔记本电脑配置较低的原因,模拟两台机器之间搭建一主一从的架构,主节点Redis主要用来写数据,数据写入到主节点的Redis,然后从节点就可以 ...

  9. C++Primer 5th Chap2 Variables and basic Types

    wchar_t,char16_t,char32_t用于拓展字符集 char和signed char并不一样,由编译器决定类型char表现上述两种中的哪一种 一般long的大小和int无二,如果超过in ...

  10. python使用matplotlib在一个图形中绘制多个子图以及一个子图中绘制多条动态折线问题

    在讲解绘制多个子图之前先简单了解一下使用matplotlib绘制一个图,导入绘图所需库matplotlib并创建一个等间隔的列表x,将[0,2*pi]等分为50等份,绘制函数sin(x).当没有给定x ...