android 利用socket 发送Json数据demo

客户端代码:

package com.yqq.jsonclienttest;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

/**
 * 套接字客户端,
 * 1、先生成JSON对象
 * 2、将JSON对象转成JSON字符串
 * 3、将JSON字符串转成字节数组写入套接字输出流
 * @author yqq_coder
 *
 */
public class MainActivity extends Activity {
	private EditText et_name;
	private EditText et_age;
	private EditText et_sex;
	private String host="172.21.133.15";//同一个局域网内作为服务端的手机的IP,使用端口8155

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		et_name=(EditText) findViewById(R.id.et_name);
		et_age=(EditText) findViewById(R.id.et_age);
		et_sex=(EditText) findViewById(R.id.et_sex);
	}

	public void submit(View v) throws JSONException{
		if(TextUtils.isEmpty(et_name.getText().toString().trim())||TextUtils.isEmpty(et_age.getText().toString().trim())||TextUtils.isEmpty(et_sex.getText().toString().trim())){
			Toast.makeText(MainActivity.this, "信息不能为空!!!", 0).show();
			return;
		}
		JSONObject jsonObject=new JSONObject();
		jsonObject.put("name", et_name.getText().toString().trim());
		jsonObject.put("age", et_age.getText().toString().trim());
		jsonObject.put("sex", et_sex.getText().toString().trim());
		final String  result=jsonObject.toString();
		Log.i("jSON字符串", result);
		new Thread(new  Runnable() {
			@Override
			public void run() {

				try {
					Socket socket=new Socket(InetAddress.getByName(host), 8155);
					OutputStream os=socket.getOutputStream();
					os.write(result.getBytes());
					os.flush();
					//防止服务端read方法读阻塞
					socket.shutdownOutput();
				} catch (UnknownHostException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		}).start();
	}

}

服务端代码:

package com.yqq.jsonclienttest1;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

import org.json.JSONException;
import org.json.JSONObject;

import com.yqq.jsonclienttest1.R;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
 * 套接字服务端
 * @author yqq_coder
 *
 */
public class MainActivity extends Activity {
	private Button btn;
	  volatile Socket   mSocket;
	  ServerSocket server;
	private Handler mHandler=new Handler(){

		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			super.handleMessage(msg);
			if(msg.what==0x01){
				Toast.makeText(MainActivity.this,(String) msg.obj, 500).show();
				btn.setEnabled(true);
			}
			if(msg.what==0x02){
				new Thread(new  Runnable() {
					@Override
					public void run() {

						try {
							 Log.i("客户端连接", "读取客户端发来的数据");
							InputStream ins=mSocket.getInputStream();
							ByteArrayOutputStream os=new ByteArrayOutputStream();
							int len=0;
							byte[] buffer=new byte[1024];
							while((len=ins.read(buffer))!=-1){
								os.write(buffer);
							}
							//第一步,生成Json字符串格式的JSON对象
							JSONObject jsonObject=new JSONObject(os.toString());
							//第二步,从JSON对象中取值如果JSON 对象较多,可以用json数组
							String name="姓名:"+jsonObject.getString("name");
							String age="年龄:"+jsonObject.getString("age");
							String sex="性别:"+jsonObject.getString("sex");
							StringBuffer sb=new StringBuffer();
							sb.append(name);
							sb.append(age);
							sb.append(sex);
							Looper.prepare();
							Message message=Message.obtain();
							message.what=0X01;
							message.obj=sb.toString();
							mHandler.sendMessage(message);
							Looper.loop();

						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}finally{

							if(mSocket!=null){
								try {
									mSocket.close();
									mSocket=null;
								} catch (IOException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}

							}
						}

					}
				}).start();
			}

		}

	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn=(Button) findViewById(R.id.btn);

	}

	public void submit(View v) throws JSONException, IOException{
		btn.setEnabled(false);

		new Thread(new  Runnable() {

			@Override
			public void run() {

					try {
						 Log.i("阻塞,等待客户端连接", "<<<<<<<<<");
						 if(server==null){
						 server=new ServerSocket(8155);
						 }
						 mSocket=server.accept();
						 Log.i("客户端连接成功", "<<<<<<<<<客户端连接成功");
						Looper.prepare();
						Message message=Message.obtain();
						message.what=0X02;
						mHandler.sendMessage(message);
						Looper.loop();

					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} 

			}
		}).start();
	}

}

第二次监听时候报错:

04-28 12:55:52.841: W/System.err(8761): java.net.BindException: bind failed:

解决办法:

 if(server==null){
						 server=new ServerSocket(8155);
						 }

demo下载地址:http://download.csdn.net/detail/u014600432/8640955

时间: 2024-10-05 06:45:41

android 利用socket 发送Json数据demo的相关文章

Android向服务器发送json数据,

移动到博客标题,问题描述:如何在有序数组中给出指定数字出现的次数,例如:数组{1,2,2,2,3,4,5} 数字2的出现次数为3. 最简单的方法是遍历数组,代码如下: #include //如何在有序数组中给出指定数字出现的次数 int binarysearch(int *a,int n,int x) { int cnt=0; for(int i=0;i<n;i++) { if(a[i]==x) ...点击超链接,可以进入到该博客移动到博客标题,点击超链接,可以进入到该博客移动到博客标题,点击超

[小项目] 获取手机联系人并且向服务器发送JSON数据

[小项目] 获取手机联系人并且向服务器发送JSON数据 好久没有写文档了...最近忙着带班,也没有时间学习新东西,今天刚好有个小Demo,就写了一下,顺便丰富一下我的博客吧! 首先说一下需求: 简单的说,就是一个程序,会获取手机的联系人列表,然后转换成JSON字符串数组,向指定服务器中发送数据...总感觉有侵犯别人隐私权的意味; 注:仅供学习使用,不要做违法的事情哟 这个程序我写的有点有条理,首先有几个工具类: 1. 判断是否联网的工具类(NetUtils) 2. 从手机中获取所有联系人的工具类

java使用httpcomponents post发送json数据

一.适用场景 当我们向第三方系统提交数据的时候,需要调用第三方系统提供的接口.不同的系统提供的接口也不一样,有的是SOAP Webservice.RESTful Webservice 或其他的.当使用的是RESTful webservice的时候,就可以使用httpcomponents组件来完成调用. 如我们需要发起post请求,并将数据转成json格式,设置到post请求中并提交. url:"http://www.xxxxx.com/message" json数据格式 {"

php 利用socket发送GET,POST请求

作为php程序员一定会接触http协议,也只有深入了解http协议,编程水平才会更进一步.最近我一直在学习php的关于http的编程,许多东西恍然大悟,受益匪浅.希望分享给大家.本文需要有一定http基础的开发者阅读. 今天给大家带来的是如何利用socket发送GET,POST请求.我借用燕十八老师封装好的一个Http类给进行说明. 在日常编程中相信很多人和我一样大部分时间是利用浏览器向服务器提出GET,POST请求,那么可否利用其它方式提出GET,POST请求呢?答案必然是肯定的.了解过HTT

HttpClient发送Json数据到指定接口

项目中遇到将Json数据发送到指定接口,于是结合网上利用HttpClient进行发送. /** * post发送json数据 * @param url * @param param * @return */ private String doPost(String url, JSONObject param) { HttpPost httpPost = null; String result = null; try { HttpClient client = new DefaultHttpCli

Struts2.5 利用Ajax将json数据传值到JSP

AJAX +JSON=>JSP AJAX AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面. JSON JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范

Http post方式发送json数据

HttpClient模拟get,post请求并发送请求参数(json等) import java.io.IOException; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.Header; import org.

iOS开发网络篇—发送json数据给服务器以及多值参数

iOS开发网络篇—发送json数据给服务器以及多值参数 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 代码示例: 1 #import "YYViewController.h" 2 3 @interface YYViewController () 4 5 @end 6 7 @implementation YYViewController 8 9 - (void)viewDidLoad 10

SpringMVC客户端发送json数据时报400错误

当测试客户端发送json数据给服务器时,找不到响应路径? 原来是参数类型不符,即使是json也要考虑参数的个数和类型 解决:将age请求参数由"udf"改为"3"或任意数字即可