Android进程间通信之socket通信
用Java中的socket编程。
通过socket实现两个应用之间的通信,可以接收和发送数据,同时将接收到的数据显示在activity界面上。
Server端:
ServerLastly.java
package com.example.driverexam; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket; import android.os.Handler;
import android.os.Message;
import android.util.Log; /**
* 通过Socket实现
* @author Administrator
*
*/
public class ServerLastly implements Runnable{
private static final String TAG="ServerLastly";
ServerSocket server;
Socket client;
PrintWriter os;
BufferedReader is; Handler handler; /**
* 此处不将连接代码写在构造方法中的原因:
* 我在activity的onCreate()中创建示例,如果将连接代码 写在构造方法中,服务端会一直等待客户端连接,界面没有去描绘,会一直出现白屏。
* 直到客户端连接上了,界面才会描绘出来。原因是构造方法阻塞了主线程,要另开一个线程。在这里我将它写在了run()中。
*/
ServerLastly(Handler handler){
this.handler=handler;
// Log.i(TAG, "Server=======打开服务=========");
// try {
// server=new ServerSocket(8888);
// client=server.accept();
// Log.i(TAG, "Server=======客户端连接成功=========");
// InetAddress inetAddress=client.getInetAddress();
// String ip=inetAddress.getHostAddress();
// Log.i(TAG, "===客户端ID为:"+ip);
// os=new PrintWriter(client.getOutputStream());
// is=new BufferedReader(new InputStreamReader(client.getInputStream()));
//
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
} //发数据
public void send(String data){
if (os!=null) {
os.println(data);
os.flush();
}
} //接数据
@Override
public void run() {
Log.i(TAG, "Server=======打开服务=========");
try {
server=new ServerSocket(8080);
client=server.accept();
Log.i(TAG, "Server=======客户端连接成功=========");
InetAddress inetAddress=client.getInetAddress();
String ip=inetAddress.getHostAddress();
Log.i(TAG, "===客户端ID为:"+ip);
os=new PrintWriter(client.getOutputStream());
is=new BufferedReader(new InputStreamReader(client.getInputStream())); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} String result="";
while(true){
try {
result=is.readLine();
Log.i(TAG, "服务端接到的数据为:"+result);
//把数据带回activity显示
Message msg=handler.obtainMessage();
msg.obj=result;
msg.arg1=0x11;
handler.sendMessage(msg); } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } public void close(){
try {
if (os!=null) {
os.close();
}
if (is!=null) {
is.close();
}
if(client!=null){
client.close();
}
if (server!=null) {
server.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
ServerFinallyActivity.java
package com.example.driverexam; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView; public class ServerFinallyActivity extends Activity { EditText et_serverSend;
TextView tv_showReceiveData; // ServerFinally server; ServerLastly server;
StringBuffer receiveData=new StringBuffer(); Handler handler=new Handler(new Handler.Callback() { @Override
public boolean handleMessage(Message msg) {
if (msg.arg1==0x11) {
receiveData.append((String)msg.obj);
tv_showReceiveData.setText(receiveData);
receiveData.append("\r\n");
} return false;
}
}); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_server_finally);
et_serverSend=(EditText) findViewById(R.id.et_serverSend);
tv_showReceiveData=(TextView) findViewById(R.id.tv_showReceiveData); // server=new ServerFinally();
// new Thread(server).start(); server=new ServerLastly(handler);
new Thread(server).start(); } //发数据
public void btn_serverSend(View view){
server.send(et_serverSend.getText().toString()+"");
et_serverSend.setText("");
} @Override
protected void onDestroy() {
super.onDestroy();
server.close();
} }
Client端:
ClientLastly.java
package com.fqhx.remoteserviceclient; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; import android.os.Handler;
import android.os.Message;
import android.util.Log; /**
* 通过socket实现
* @author Administrator
*
*/
public class ClientLastly implements Runnable{
private static final String TAG="ClientLastly";
private static final String NAME="com.repackaging.localsocket";
private int timeout=30000;
Socket client;
PrintWriter os;
BufferedReader is; Handler handler; ClientLastly(Handler handler){
this.handler=handler;
// try {
// //连接服务器
// client=new Socket("localhost", 8888);
// Log.i(TAG, "Client=======连接服务器成功=========");
// client.setSoTimeout(timeout);
// os=new PrintWriter(client.getOutputStream());
// is=new BufferedReader(new InputStreamReader(client.getInputStream()));
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
} //发数据
public void send(String data){
Log.i(TAG, "Client=======data=========");
if (os!=null) {
os.println(data);
os.flush();
}
} //接收据
@Override
public void run() {
try {
//连接服务器
// client=new Socket("192.168.191.1", 8080);
client=new Socket("localhost", 8080);
Log.i(TAG, "Client=======连接服务器成功=========");
client.setSoTimeout(timeout);
os=new PrintWriter(client.getOutputStream());
is=new BufferedReader(new InputStreamReader(client.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} String result="";
while(true){
try {
result=is.readLine();
Log.i(TAG, "客户端接到的数据为:"+result);
//将数据带回acitvity显示
Message msg=handler.obtainMessage();
msg.arg1=0x12;
msg.obj=result;
handler.sendMessage(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } public void close(){
try {
if (os!=null) {
os.close();
}
if (is!=null) {
is.close();
}
if(client!=null){
client.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
ClientFinallyActivity.java
package com.fqhx.remoteserviceclient; import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView; public class ClientFinallyActivity extends Activity { // ClientFinally client;
EditText et_clientSend;
TextView tv_showReceiveDataClient; ClientLastly client;
StringBuffer receiveData=new StringBuffer(); Handler handler=new Handler(new Handler.Callback() { @Override
public boolean handleMessage(Message msg) {
if (msg.arg1==0x12) {
receiveData.append((String)msg.obj);
tv_showReceiveDataClient.setText(receiveData);
receiveData.append("\r\n");
} return false;
}
}); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client_finally); et_clientSend=(EditText) findViewById(R.id.et_clientSend);
tv_showReceiveDataClient=(TextView) findViewById(R.id.tv_showReceiveDataClient); // client=new ClientFinally();
// new Thread(client).start(); client=new ClientLastly(handler);
new Thread(client).start();
} public void btn_clientSend(View view){
client.send(et_clientSend.getText().toString()+"");
et_clientSend.setText("");
} @Override
protected void onDestroy() {
super.onDestroy();
client.close();
}
}
Android进程间通信之socket通信的更多相关文章
- Android简单实现Socket通信,client连接server后,server向client发送文字数据
案例实现的是简单的Socket通信,当client(Androidclient)连接到指定server以后,server向client发送一句话文字信息(你能够拓展其他的了) 先看一下服务端程序的实现 ...
- Android进程间通信之LocalSocket通信
LocalSocket,在Unix域名空间创建的一个套接字(非服务端). 是对Linux中Socket进行了封装,采用JNI方式调用,实现进程间通信. 具体就是Native层Server和Framew ...
- 从零开始学android -- 简易的socket通信
先来介绍下socket,网上摘抄点资料,免得自己打字了 网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 1.消息传递(管道.FIFO.消息队列) 2.同步(互 ...
- android中非堵塞socket通信
1.什么是同步与异步,堵塞与非堵塞 首先我们要明确搞明确:同步就等于堵塞?异步就等于非堵塞?这是不正确的,同步不等于阻 塞.而异步也不等于非堵塞. 1)那什么是同步编程? 什么是同步,就是在发出一个功 ...
- android wifi热点 socket通信
1.首先建立wifi热点服务器 wifi客户端连接 2.开启一个子线程循环监听某个端口,进行数据流输入输出 /* 服务器 接收数据 */ class Receiver extends Thread ...
- Android 网络编程 Socket
1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...
- Android native进程间通信实例-socket本地通信篇之——基本通信功能
导读: 网上看了很多篇有关socket本地通信的示例,很多都是调通服务端和客户端通信功能后就没有下文了,不太实用,真正开发中遇到的问题以及程序稳定性部分没有涉及,代码健壮性不够,本系列(socket本 ...
- Android之Socket通信、List加载更多、Spinner下拉列表
Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...
- Android开发--Socket通信
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...
随机推荐
- web
1.linux下交换文件 .index.php.swp 有时可查看源码2.当php后缀被过滤的时候可以直接对ph开头的后缀进行一个fuzz测试可以上传的文件后缀名3.curl -x 123.45.67 ...
- 利用nodejs实现登录并转码视频(原创)
nodejs的出现让前端人员可以使用js打造后台,也许哪天就真的摆脱了对java或者php的依赖了. 今天跟大家分享一个利用nodejs接受前端post请求,并实现视频转码的这样一个例子.视频转码用到 ...
- springMVC中一个controller多个方法
web.xml文件: <?xml version="1.0" encoding="UTF-8"?><web-app version=" ...
- 使用IronPython给.Net程序加点料
开发的时候,经常被策划频繁变动的方案而苦恼.这时候就想要加入点动态语言来辅助一下. 在考虑用动态语言之前也曾想过使用动态加载dll的方式,实现基础接口来调用.在卸载的时候遇到了问题,虽可以通过应用程序 ...
- Xamarin.Android之MvvmCross
欢迎大家加入以下开源社区 Xamarin-Cn:https://github.com/Xamarin-Cn Mvvmcross-Cn:https://github.com/Mvvmcross-Cn ...
- [教程]怎么用百度云观看和下载"磁力链接"无需下载直接观看.
1, 打开网址 http://okbt.net/ 输入你想要看的电影名字, 点搜索,鼠标右键点击拷贝磁力链接.或者 电脑装了迅雷的话.可以直接点击.用迅雷下载. 磁力链接都是这种格式的.例: mag ...
- 安装金山WPS2013造成的HTML5 file.type值异常
处理代码的兼容性是前端攻城师们的家常便饭了,一般是对各种浏览器进行兼容性处理.但是有时候我们也会遭遇到浏览器以外的影响因素,这个是经常会被忽视掉的内容.比如前几天就听说客户端安装迅雷.暴风影音等软件会 ...
- 推荐windows下的日志跟踪工具:SnakeTail
用过Linux的同学都知道,在Linux中要实时跟踪日志文件那是非常的方便,Tail.Less都可以做到. 开启动态跟踪后,程序会监视文件修改,从而不断刷新出最新的内容,对于线上运维特别有用. 今 ...
- [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)
:由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . ...
- IOS Socket 05-XMPP开始&安装服务器openfire&安装配置客户端
1. 即时通讯技术简介(IM) 即时通讯技术(IM-Instant Messageing)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方 ...