`
wanglihu
  • 浏览: 919300 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类

基于http协议的java客户端

阅读更多
1.服务器端:使用TT存储数据,开启服务端:
cd /home/wlh/tt/tokyotyrant/bin/
./ttserver -host 127.0.0.1 -port 1998 -ulog ulog-1 -sid 1 casket.tch

2.基于http协议的客户端实现代码:
package com.tt.client;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpClientTest {
	//服务端主机地址
	public static final String TTSERVER_HOST = "http://10.236.0.12";
	//服务端端口号
	public static final int TTSERVER_PORT = 1998;
	/**
         * @date 2011.12.26
         * @Administrator wanglihu
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		HttpRequest hq = new HttpRequest();
                //存储数据,发送put请求
		String msg = hq.put("test_key", "test_value", 0, TTSERVER_HOST, TTSERVER_PORT);
		System.out.println(msg);//test_valueCreated
		msg = hq.put("test_key","test_value1", 0,TTSERVER_HOST, TTSERVER_PORT);
		System.out.println(msg);//Exception in thread "main" java.io.FileNotFoundException: http://10.236.0.12:1998/test_key
                //通过key值获得value数据
		msg = hq.get("test_key", TTSERVER_HOST, TTSERVER_PORT);
		System.out.println(msg);//test_value
		msg = hq.options(TTSERVER_HOST, TTSERVER_PORT);
		System.out.println(msg);//空值
		msg = hq.head("test_key", TTSERVER_HOST, TTSERVER_PORT);
		System.out.println(msg);//空值
		msg = hq.delete("test_key", TTSERVER_HOST, TTSERVER_PORT);
		System.out.println(msg);//OK
		msg = hq.get("test_key", TTSERVER_HOST, TTSERVER_PORT);
		System.out.println(msg);//Exception in thread "main" java.io.FileNotFoundException: http://10.236.0.12:1998/test_key
	}

}
final class HttpRequest{
	public final String put(String key,String value,int flag,String host,int port) throws IOException{
		if(flag < 0 || flag > 2){
			flag = 0;
		}
		URL url = new URL(host + ":" + port + "/" +key);
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		connection.setDoInput(true);
		connection.setDoOutput(true);
		
		connection.setRequestMethod("PUT");//总共有其中方法:GET,POST,HEAD,OPTIONS,PUT,DELETE,TRACE,CONNECT
		connection.setRequestProperty("HOST", host + ":" +port);//设置主机和端口号
		connection.setRequestProperty("ACCEPT", "*/*");//设置可以接受的媒体(头部)
		//PUT有header"X-TT-PDMODE",值可以是1(同'tcrdbputkeep'),2(同'tcrdbputcat'),3(同'tcrdbput')
		//POST可以有header"X-TT-XNAME"或者"X-TT-MNAME"中的一个.
		//X-TT-XNAME等同于"tcrdbext",用于指定函数名,header"X-TT-XOPTS"用于bitwise-or选项,1(记录锁)和2(全局锁),
		//每个请的URI将被作为URL编码过的key对待,而实体内容被作为value,结果表示在应答的实体正文中。
		//header"X-TT-MOPTS"用于bitwise-or选项,1(忽略更新日志),请求参数用"application/x-www-form-urlencoded"格式表示在实体正文中,
		//名字被忽略而值被作为参数列表。结果在应答的实体正文中用"application/x-www.form-url-urlencoded"格式表示
		//PUT有header"X-TT-PDMODE",值可以是1(同'tcrdbputkeep'),2(同'tcrdbputcat'),3(同'tcrdbput')
		connection.setRequestProperty("X-TT-PDMODE:", " 2 ");
		//设置连接主机超市(单位:毫秒)
		connection.setConnectTimeout(30000);
		//设置从主机读取数据超时(单位:毫秒)
		connection.setReadTimeout(30000);
		
		connection.connect();
		OutputStream outputStream = connection.getOutputStream();
		//通过输出流对象构建对象输入流,以实现输出可序列化的对象
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
		//想对象输出流写出数据,这些数据将存到内存缓冲区中
		bw.write(value);
		//刷新对象输出流,将任何字节都写入潜在的流中
		bw.flush();
		//关闭对象流,此时,不能再想对象输出流中写入任何数据,先前写入的数据存在于内存缓冲区中
		//在调用下面的getInputStream()函数时才把准备好的http请求正是发送到服务器
		bw.close();
		//connection.getInputStream(),将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端
		BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));//注意,实际发送请求的代码段就在这里
		//上面的connection.getInputStream()方法已调用,本次http请求结束,下边向对象输出流的输出已无意义。
		//即使对象输出流没有调用close()方法,下面的操作也不会向对象输出流写入任何数据。
		//因此,要重新发送数据时需要重新创建连接、重新设参数、重新创建流对象、重新写数据,重新发送数据
		StringBuffer buffer = new StringBuffer(100);
		buffer.append(value);
		String line = null;
		if(br == null){
			System.out.println("result is null!");
		}
		while((line = br.readLine()) != null){
			buffer.append(line);
			buffer.append("\r\n");
		}
		br.close();
		return buffer.toString();
	}
	public final String get(String key , String host,int port) throws IOException{
		URL url = new URL(host + ":" + port + "/" +key);
		//HttpURLConnection对象实际上是根据URL的请求协议(此处是http)生成的URLConnection类的子类HttpURLConnection,
		//故此处最好将其转化为HttpURLConnection类型的对象,以便用到HttpURLConnection更多的API
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		//设置是否向HttpURLConnection读入,默认情况下是false
		connection.setDoInput(true);
		//对象参数1:设置是否向HttpURLConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true,默认情况下是false
		connection.setDoOutput(true);
		//请求不能使用缓存
		connection.setUseCaches(false);
		//设定传送的内容类型是可序列化的java对象(如果不设此项,在传送序列化对象时,当Web服务默认的不是这种类型时可能抛出java.io.EOFException)
		connection.setRequestProperty("Content-type", "application/x-java-serialized-object");
		//设置请求的方法是"GET",默认就是GET
		connection.setRequestMethod("GET");
		
		connection.setRequestProperty("HOST", host + ":" +port);
		connection.setRequestProperty("ACCEPT", "*/*");
		//上面的配置信息必须在connect之前完成
		connection.connect();
		
		//此处的getInputStream会隐含的进行connect(即:如同调用上面的connect()方法,所以在开发中不调用上述connect()也可以)
		//通过输入流对象构建对象输入流,以实现输入可序列化的对象
		BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
		StringBuffer buffer = new StringBuffer(100);
		String line = null;
		if(br == null){
			System.out.println("result is null!");
		}
		while((line = br.readLine()) != null){
			buffer.append(line);
			buffer.append("\r\n");
		}
		br.close();
		return buffer.toString();
	}
	public final String delete(String key,String host,int port)throws IOException{
		URL url = new URL(host + ":" + port + "/" +key);
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		connection.setDoInput(true);
		connection.setDoOutput(true);
		connection.setRequestMethod("DELETE");
		connection.setRequestProperty("HOST", host + ":" +port);
		connection.setRequestProperty("ACCEPT", "*/*");
		connection.connect();
		BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
		StringBuffer buffer = new StringBuffer(100);
		String line = null;
		if(br == null){
			System.out.println("result is null!");
		}
		while((line = br.readLine()) != null){
			buffer.append(line);
			buffer.append("\r\n");
		}
		br.close();
		return buffer.toString();
		
	}
	public final String options(String host,int port)throws IOException{
		URL url = new URL(host + ":" + port + "/");
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		connection.setDoInput(true);
		connection.setDoOutput(true);
		connection.setRequestMethod("OPTIONS");
		connection.setRequestProperty("HOST", host + ":" +port);
		connection.setRequestProperty("ACCEPT", "*/*");
		connection.connect();
		BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
		StringBuffer buffer = new StringBuffer(100);
		String line = null;
		if(br == null){
			System.out.println("result is null!");
		}
		while((line = br.readLine()) != null){
			buffer.append(line);
			buffer.append("\r\n");
		}
		br.close();
		return buffer.toString();
	}
	public final String head(String key,String host,int port)throws IOException{
		URL url = new URL(host + ":" + port + "/" + key);
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		connection.setDoInput(true);
		connection.setDoOutput(true);
		connection.setRequestMethod("OPTIONS");
		connection.setRequestProperty("HOST", host + ":" +port);
		connection.setRequestProperty("ACCEPT", "*/*");
		connection.connect();
		BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
		StringBuffer buffer = new StringBuffer(100);
		String line = null;
		if(br == null){
			System.out.println("result is null!");
		}
		while((line = br.readLine()) != null){
			buffer.append(line);
			buffer.append("\r\n");
		}
		br.close();
		return buffer.toString();
	}
} 
分享到:
评论

相关推荐

    基于Java的FTP客户端源代码

    Java FTP客户端源代码是用于通过Java编程语言与FTP(文件传输协议)服务器进行交互的程序。FTP是一种在互联网上常用的标准文件传输协议,允许用户上传、下载和管理远程服务器上的文件。Java提供了一系列的API,如`...

    基于java开发的onebot协议客户端.zip

    在本项目中,“基于java开发的onebot协议客户端.zip”是一个使用Java编写的客户端程序,它实现了OneBot协议。OneBot协议通常用于机器人开发,允许用户通过API与聊天平台的机器人进行交互。 首先,让我们深入了解...

    基于JAVA开发的客户端软件.zip

    4. **网络通信**:客户端软件往往需要与服务器通信,涉及HTTP、HTTPS、Socket等网络协议,以及JSON或XML数据交换格式。 5. **数据库集成**:如果客户端软件需要存储和检索数据,那么了解JDBC(Java Database ...

    基于java的ftp客户端设计与实现

    本项目旨在提供一个基于Java的FTP客户端,以满足用户对远程文件系统的访问需求。以下是对这个项目的详细解读: 1. FTP协议基础: FTP是一种用于在网络上传输文件的标准协议,它允许用户从远程服务器获取文件或向其...

    基于Java的netty-mqtt MQTT 3.1.1协议服务端与客户端设计源码

    netty-mqtt是一个基于Java开发的MQTT 3.1.1协议服务端与客户端,包含113个文件,其中包括87个Java源文件、8个XML文件、7个Iml文件、3个YAML文件、3个JKS文件、2个Factories文件、1个LICENSE文件和1个Markdown文件。...

    java sip 协议栈实现客户端和服务

    在这个基于Java的SIP协议栈实现中,我们可以通过提供的源码实例和jar包来理解和学习SIP的工作原理。 首先,我们来看标题中的“java sip 协议栈实现客户端和服务”。这意味着这个项目包含了SIP协议客户端和服务器端...

    Java通过UA协议操作OPC的demo和客户端工具

    在这个“Java通过UA协议操作OPC的demo和客户端工具”资源中,我们可以看到几个关键元素: 1. **OPC UA协议**:OPC UA不仅提供了数据访问的功能,还包括了安全认证、事件处理和信息模型等高级特性。它支持基于证书的...

    rtp协议客户端实现 java

    通过理解RTP协议原理,结合Java的网络编程接口,以及适当的第三方库,可以构建出能够接收和播放RTP流的Java客户端程序。在实际开发中,还需要关注性能优化、错误处理和兼容性测试等方面,以确保客户端的稳定性和实用...

    Java基于socket实现的客户端和服务端通信功能完整实例

    Java基于socket实现的客户端和服务端通信功能完整实例 在Java中,Socket是实现网络通信的基础,通过Socket可以实现客户端和服务器端之间的通信。本文将详细介绍Java基于Socket实现的客户端和服务端通信功能,包括...

    java socket 客户端代码

    在本文中,我们将深入探讨Java Socket客户端代码及其在创建基于Socket的聊天室客户端中的应用。 首先,理解Socket的基本概念至关重要。Socket是TCP/IP协议族的一部分,允许两台机器(通常是一个服务器和一个客户端...

    基于SSL/TLS协议的FTP客户端和服务器端

    基于SSL/TLS协议的FTP客户端和服务器端的实现,结合Java的JSSE框架,提供了强大的安全保障。通过三元组认证,进一步增强了用户身份验证的复杂性和安全性。对于需要安全文件传输的场景,这样的系统是理想的选择。通过...

    开发CXF JAVA客户端

    在IT行业中,开发CXF Java客户端是一项常见的任务,特别是在构建基于Web服务的应用程序时。CXF是一个开源框架,它提供了创建和消费SOAP和RESTful Web服务的能力。本篇将深入探讨如何利用CXF来开发Java客户端,同时也...

    104协议客户端

    在这个过程中,安装JAVA环境是必要的,因为很多104协议相关的软件开发是基于Java平台的,Java提供了跨平台的优势,使得软件可以在多种操作系统上运行。 "IECServer.exe"可能就是这个模拟服务器的执行文件,用户可以...

    memCache源码java客户端

    **memCache源码分析——Java客户端** memCache是一款高性能、分布式的内存对象缓存系统,常用于减轻数据库的负载,提升应用性能。它的主要特点是基于内存存储,操作速度快,无持久化机制,适用于缓存非关键数据。在...

    http协议客户端编程

    HTTP协议是一种基于客户端/服务器模型的应用层协议,用于传输超文本和其他多媒体资源。其工作流程简单来说是:客户端发起请求,服务器接收请求并返回响应。 ##### 2.1 请求报文结构 HTTP请求报文由三部分组成: 1....

    基于java netty的udp客户端声呐数据对接

    在"基于Java Netty的UDP客户端声呐数据对接"项目中,我们主要关注如何利用Netty处理UDP通信,以及如何解析和封装SCANFISH-II型声呐系统的数据。 UDP(User Datagram Protocol)是一种无连接的传输层协议,它不保证...

Global site tag (gtag.js) - Google Analytics