用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通信的更多相关文章

  1. Android简单实现Socket通信,client连接server后,server向client发送文字数据

    案例实现的是简单的Socket通信,当client(Androidclient)连接到指定server以后,server向client发送一句话文字信息(你能够拓展其他的了) 先看一下服务端程序的实现 ...

  2. Android进程间通信之LocalSocket通信

    LocalSocket,在Unix域名空间创建的一个套接字(非服务端). 是对Linux中Socket进行了封装,采用JNI方式调用,实现进程间通信. 具体就是Native层Server和Framew ...

  3. 从零开始学android -- 简易的socket通信

    先来介绍下socket,网上摘抄点资料,免得自己打字了 网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 1.消息传递(管道.FIFO.消息队列) 2.同步(互 ...

  4. android中非堵塞socket通信

    1.什么是同步与异步,堵塞与非堵塞 首先我们要明确搞明确:同步就等于堵塞?异步就等于非堵塞?这是不正确的,同步不等于阻 塞.而异步也不等于非堵塞. 1)那什么是同步编程? 什么是同步,就是在发出一个功 ...

  5. android wifi热点 socket通信

    1.首先建立wifi热点服务器  wifi客户端连接 2.开启一个子线程循环监听某个端口,进行数据流输入输出 /* 服务器 接收数据 */ class Receiver extends Thread ...

  6. Android 网络编程 Socket

    1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...

  7. Android native进程间通信实例-socket本地通信篇之——基本通信功能

    导读: 网上看了很多篇有关socket本地通信的示例,很多都是调通服务端和客户端通信功能后就没有下文了,不太实用,真正开发中遇到的问题以及程序稳定性部分没有涉及,代码健壮性不够,本系列(socket本 ...

  8. Android之Socket通信、List加载更多、Spinner下拉列表

    Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...

  9. Android开发--Socket通信

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...

随机推荐

  1. 深入剖析Nginx一点小笔记

    前几天在图书馆看书,恰好看到这本<深入剖析nginx>,花了快一周的时间看完了这本书,写点笔记心得便于以后复习. 以前对nginx的认识就只是停留在一个反向代理服务器上.百度了一下ngin ...

  2. iOS关于定制某个控件四个角是否为圆角

    UIView *myView=[[UIView alloc]initWithFrame:CGRectMake(50, 70, 200, 200)]; UIBezierPath * bezierPath ...

  3. 写在分类之首-----to do list!

    1.增强学习 http://www.wildml.com/2016/10/learning-reinforcement-learning/ 2.RNN 别人的博客目录: 1.学些增强学习(通过代码,练 ...

  4. LDA和PLSA

    看了<LDA数学八卦>和July的博客,里面涉及到好多公式推导...感觉好复杂,于是记录一些重点简洁的东西,忽略大批量铺垫,直接回答LDA和PLSA是区别: 在pLSA模型中,我们按照如下 ...

  5. 配置tomcat编码格式

    tomcat默认编码格式为“ISO-8859-1”,打开tomcat的“server.xml”文件,找到下面行并修改 <Connector connectionTimeout="200 ...

  6. Xml文件并发读写的解决方法

    之前对xml的操作大都是通过XmlDocument对象来进行,但是这样的情况对于没有并发的是非常合适的,最近遇到了并发读写xml文件的情况.通过文件流来操作能解决大部分的并发情况,对于极端的情况会有问 ...

  7. Dubbo框架选型

    一.为什么会是dubbo 1.Dubbo是一个分布式服务框架,提供RPC(远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.) 远程服务调用方案,以及SOA ...

  8. DWZ错误的解决:0x800a13af - Microsoft JScript 运行时错误: 重新声明常量“document”

    在写完Login后,需要跳转到Index中,就是DWZ的主界面,结果出现如下问题: 0x800a13af - Microsoft JScript 运行时错误: 重新声明常量“document” 费了很 ...

  9. Web Essentials之HTML和CSS操作技巧

    返回Web Essentials功能目录 一些Javascript功能也可以用于TypeScript. 本篇目录 功能 ZenCoding LESS 功能 最小化HTML文件 选中要最小化的.html ...

  10. FusionCharts简单教程(八)-----使用网格组件

            有时候我们会觉得使用图像不够直接,对于数据的显示没有表格那样直接明了.所以这里就介绍如何使用网格组件.将网格与图像结合起来.网格组件能够将FusionCharts中的单序列数据以列表的 ...