JAVA服务端android客户端如何通信

假如我java服务端是在虚拟机linux上开发,android客户端在windows上开发,那他们如何通信???,用json吧,我觉得json比较好看..就例如在android客户端登陆,通过java服务端在数据库上查找,android注册用户通过java服务端上插入数据库。有这方面的例子给我参考吗?

一、HTTP请求(APACHE的HttpClient实现)
服务器端,就是普通的servlet、Strutus2就可以
移动端
protected static String get(String url, List<NameValuePair> params) {
String resultMsg;

// 设置http请求配置
HttpParams parms = new BasicHttpParams();
parms.setParameter("charset", HTTP.UTF_8);
// 配置连接超时
HttpConnectionParams.setConnectionTimeout(parms, 10 * 1000);
// 设置请求超时
HttpConnectionParams.setSoTimeout(parms, 15 * 1000);
// 实例化HttpClient
HttpClient httpclient = new DefaultHttpClient(parms);
// 实例化HttpGet
HttpGet httpget = new HttpGet(url);
// 设置请求头
httpget.addHeader("Content-Type", "application/json");
httpget.addHeader("charset", HTTP.UTF_8);

try {
if (params.size() > 0)
url = url + "?" + URLEncodedUtils.format(params, HTTP.UTF_8);

HttpResponse resp = httpclient.execute(httpget);
int statusCode = resp.getStatusLine().getStatusCode();

if (statusCode == HttpStatus.SC_OK) {
StringBuffer result = getResponse(resp);
resultMsg = result.toString();
} else {
resultMsg = "连接异常";
}
} catch (Exception e) {
resultMsg = "连接异常";
} finally {
// 关闭get
httpget.abort();
// 关闭连接 ,释放资源
httpclient.getConnectionManager().shutdown();
}
return resultMsg;
}

protected static String post(String uri, Object params) {
String resultMsg;
// 设置http请求配置
HttpParams hp = new BasicHttpParams();
hp.setParameter("charset", HTTP.UTF_8);
// 配置连接超时
HttpConnectionParams.setConnectionTimeout(hp, 10 * 1000);
HttpConnectionParams.setSoTimeout(hp, 15 * 1000);
// 实例化HttpClient
HttpClient httpclient = new DefaultHttpClient(hp);
// 实例化HttpPost请求
HttpPost httppost = new HttpPost(uri);
// 设置头信息
httppost.addHeader("Content-Type", "application/json");
httppost.addHeader("charset", HTTP.UTF_8);
try {
// 将参数进行json化
ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(params);
Log.i(TAG, "URI=" + uri + ",BEAN=" + jsonStr);
// 定义消息实体
StringEntity se = new StringEntity(jsonStr, HTTP.UTF_8);
httppost.setEntity(se);
// 通信
HttpResponse resp = httpclient.execute(httppost);
int statusCode = resp.getStatusLine().getStatusCode();
Log.i(TAG, "StatusCode=" + statusCode);
if (statusCode == HttpStatus.SC_OK) {
StringBuffer result = getResponse(resp);
resultMsg = result.toString();
} else {
resultMsg = "连接异常";
}
} catch (Exception e) {
e.printStackTrace();
resultMsg = "连接异常";
} finally {
// 关闭get
httppost.abort();
// 关闭连接 ,释放资源
httpclient.getConnectionManager().shutdown();
}
Log.i(TAG, resultMsg);
return resultMsg;
}
二、SOCKET连接
服务器端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class service_java_test {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000); //绑定的端口号
Socket socket = server.accept(); //连接不成功以至于下一行的"连接成功"
//在调试区显示不出来
System.out.println("连接成功");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
while (true) {
String msg = in.readLine();
System.out.println(msg);
out.println("Server received " + msg); //向接收方发送已接受到了的语句
out.flush();
if (msg.equals("bye")) { //若接收到"bye"则break
break;
}
}
socket.close();
}
}

安卓客户端:
package com.example.t4_android;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView myTextView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.textView1);
Thread t = new Thread(new Runnable(){
public void run(){
try {
Socket sk = new Socket("192.168.253.1", 10000);//绑定套接字,这一行一直执行不成功
//以至于下一行在安卓页面的TextView上
//不显示“已连接”的字样
//"192.168.253.1"是我利用DOS命令查找
//的本机IP
myTextView.setText("已连接");
} catch (Exception e) {
e.printStackTrace();
}
}
});
t.start();
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-06
从服务器写一个字符串过去可以这样:String p = "-1,2,5";
发过去以后,将字符串分隔开,String[] ss = p.split(",");
数组里面的元素就是位置的三个坐标了。
但鉴于你可能发送多种类型的数据,你可以写一个协议,举例说就是,String p ="P,-1,2,5";
分隔出来以后,可以根据数组里面的第一个值判断是什么类型的数据,在执行相关的操作。追问

答非所问。。。

追答

好吧 我是看到没有人给你回答 就去网上给你找了一下 就找到这些了 就给你发上去了 你竟然 无语了

本回答被网友采纳
第2个回答  2013-08-06
用webservice开放数据接口,格式可以是json也可以是xml,如果觉得webservice麻烦的话,直接用out.prilnt()将数据库里的数据打印到页面上来,打印格式一般用json比较好,android客户端只需用httpclient或者scoket连接网络访问打印数据页面即可把数据抓取呈现在手机客户端本回答被提问者采纳
第3个回答  2013-08-06
用socket通信。。

JAVA服务端android客户端如何通信
一、HTTP请求(APACHE的HttpClient实现)服务器端,就是普通的servlet、Strutus2就可以 移动端 protected static String get(String url, List<NameValuePair> params) { String resultMsg;\/\/ 设置http请求配置 HttpParams parms = new BasicHttpParams();parms.setParameter("charset", HTTP.UTF_8);\/\/ ...

我在做一个android客户端,自己写服务端,由于服务端的经验不多,所以请教...
首先,android客户端与服务器端的通信用socket和http通信都是可以实现的,主要看你的需求是什么,如果需要实时通信,那么选用socket。否则选用http通信。因为socket会建立通信管道。耗费资源过大。其次,没太明白你说得处理并发量的目标5000是什么意思。不知道是不是可以理解为你要同时与服务器进行多方数据交互...

Android进程间通信之bindService篇
AIDL(Android Interface Definition Language)是一种便捷实现跨进程通信的工具。它支持客户端并发访问,要求服务端实现线程安全设计。创建.aidl文件定义接口,服务端和客户端均需包含源码。实现AIDL接口的实例在onBind()接口返回给客户端,使得客户端能调用接口。使用AIDL的关键技术点在于通过IPC调用传递对象。...

java服务器推送消息给android
1)轮询(Pull)方式:客户端定时向服务器发送询问消息,一旦服务器有变化则立即同步消息。2)SMS(Push)方式:通过拦截SMS消息并且解析消息内容来了解服务器的命令,但这种方式一般用户在经济上很难承受。3)持久连接(Push)方式:客户端和服务器之间建立长久连接,这样就可以实现消息的及时行和实时性。3、消...

新手用Java怎么做简单后天安卓系统
使用J2EE技术或者叫JavaWeb技术开发一个Web服务器,服务器返回Json数据,android客户端解析json数据,使用http协议和服务器通信,android有相应模块和API。首先楼主得懂Java后台也就是JavaEE,用Servlet搭建Web服务,Serlvet映射一个URL,Android请求这个URL,Servlet处理请求,然后就是Java编程,Web分层、JDBC等...

Android进程间通信 深入浅出AIDL
- **监听器与观察者模式**:实现双向通信,允许客户端订阅服务端数据变化的通知,通过创建监听器接口和相应的AIDL方法来实现。总结 AIDL是Android中实现进程间通信的强大工具,通过定义清晰的接口和自动生成的Java代码,简化了进程间复杂通信的实现。结合Android的Binder机制,AIDL不仅提供了高效的通信手段,还...

如何实现android和服务器长连接
提出问题:这种功能必须涉及client(客户端)和server(服务器),所以到底client如何和server实现实时连接通讯?分析问题:这种功能实际上就是数据同步,同时要考虑手机本身、电量、网络流量等等限制因素,所以通常在移动端上有一下两个解决方案:1.一种是定时去server查询数据,通常是使用HTTP协议来访问web服务...

android怎么和服务器通讯
这2种方式都是需要服务器端的IP地址。HTTP协议的话,有多种接口可以调用你可以用Java类库封装的HttpConnection 或者用Apach的开源项目的 HttpGet 或者HttpPost ,服务器端 需要 编写 Serlvet来响应客户端的请求。Sokcet 的话, 就是 服务器端 不断监听 双方约定好的端口号,客户端通过服务器IP去请求...

【Android】使用Messenger实现进程间通讯
完整代码实例可在链接 → 使用Messenger实现进程间通讯 → 查看。在项目结构中,包含服务端和客户端两个部分。服务端代码定义如下:1. 创建服务类(MyService.java):实现Service接口,并在onStartCommand()方法中处理消息。服务需在AndroidManifest.xml文件中注册。2. 注册服务:在AndroidManifest.xml的...

android socket 编程,用java可以实现的服务器端,现在要复制源码到android...
因为你把连接都写在了主线程中,主线程的操作不能超过5秒,否则就报错了,所以你需要在button的点击事件中另开一个线程去做连接的操作,这样就不会出现错误了

相似回答