LocalSocket / LocalServerSocket

转载 2012年03月22日 09:49:44

Android LocalSocket / LocalServerSocket sample code

Abstract: This short code sample demonstrates how one can to use LocalSocket (LocalServerSocket) in Android SDK.

Platforms: Android SDK 1.0 (Eclipse 3.4.1 + ADT 0.8.0)

Add one button into your layout (main.xml):
    <Button android:id="@+id/send_1_button"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:text="send 1 request"/>


And this simple code for your activity
import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/**
*
* @author Denis Migol
*
*/
public class DemoActivity extends Activity {
    
    public static String SOCKET_ADDRESS = "your.local.socket.address";
    
    // background threads use this Handler to post messages to
    // the main application thread
    private final Handler handler = new Handler();
    
    public class NotificationRunnable implements Runnable {
        private String message = null;
        
        public void run() {
            if (message != null && message.length() > 0) {
                showNotification(message);
            }
        }
        
        /**
        * @param message the message to set
        */
        public void setMessage(String message) {
            this.message = message;
        }
    }
    
    // post this to the Handler when the background thread notifies
    private final NotificationRunnable notificationRunnable = new NotificationRunnable();
    
    public void showNotification(String message) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }
    
    class SocketListener extends Thread {
        private Handler handler = null;
        private NotificationRunnable runnable = null;
        
        public SocketListener(Handler handler, NotificationRunnable runnable) {
            this.handler = handler;
            this.runnable = runnable;
            this.handler.post(this.runnable);
        }
        
        /**
        * Show UI notification.
        * @param message
        */
        private void showMessage(String message) {
            this.runnable.setMessage(message);
            this.handler.post(this.runnable);
        }
        
        @Override
        public void run() {
            //showMessage("DEMO: SocketListener started!");
            try {
                LocalServerSocket server = new LocalServerSocket(SOCKET_ADDRESS);
                while (true) {
                    LocalSocket receiver = server.accept();
                    if (receiver != null) {
                        InputStream input = receiver.getInputStream();
                        
                        // simply for java.util.ArrayList
                        int readed = input.read();
                        int size = 0;
                        int capacity = 0;
                        byte[] bytes = new byte[capacity];
                        
                        // reading
                        while (readed != -1) {
                            // java.util.ArrayList.Add(E e);
                            capacity = (capacity * 3)/2 + 1;
                            //bytes = Arrays.copyOf(bytes, capacity);
                            byte[] copy = new byte[capacity];
                            System.arraycopy(bytes, 0, copy, 0, bytes.length);
                            bytes = copy;
                            bytes[size++] = (byte)readed;
                            
                            // read next byte
                            readed = input.read();
                        }
                        
                        showMessage(new String(bytes, 0, size));
                    }
                }
            } catch (IOException e) {
                Log.e(getClass().getName(), e.getMessage());
            }
        }
    }
    
    public static void writeSocket(String message) throws IOException {
        LocalSocket sender = new LocalSocket();
        sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
        sender.getOutputStream().write(message.getBytes());
        sender.getOutputStream().close();
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        new SocketListener(this.handler, this.notificationRunnable).start();
        
        Button send1 = (Button)findViewById(R.id.send_1_button);
        send1.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                try {
                    writeSocket("hello");
                } catch (IOException e) {
                    Log.e(getClass().getName(), e.getMessage());
                }
            }
            
        });
    }
}

LocalSocket实现进程间通信

LocalSocket实现进程间通信android下使用localsocket可以实现C与C,C与JAVA,JAVA与JAVA进程间通信。 localsocket是linux下的一种本地套接字,用来...
  • daozi22
  • daozi22
  • 2016年11月25日 23:36
  • 281

Android利用LocalSocket实现Java端进程与C端进程之间的IPC

Android是建立在Linux之上的OS,在涉及到安全、网络协议、文件加密等功能时,往往需要通过C语言调用底层API来实现,而如何发出指令让C端执行我们想要的功能,并且在执行之后有返回结果呢,这就需...
  • mirkerson
  • mirkerson
  • 2013年12月14日 14:31
  • 4664

android mediarecorder 录制音频并通过socket,存储到本地

原文地址:http://www.apkbus.com/blog-86476-43829.html 废话不说直接贴代码,看不懂代码的同志可以参考: http://blog.csdn.net/zblu...
  • cooler126
  • cooler126
  • 2013年07月18日 13:34
  • 2300

Android进程间通信之LocalSocket

转自:http://blog.csdn.net/xbalien29/article/details/8765235 我们都知道intent是Android各组件之间通信的核心。对于简单的的进...
  • earbao
  • earbao
  • 2016年02月23日 12:11
  • 1324

毕设小结(二)Android进程间通信之LocalSocket

我们都知道intent是Android各组件之间通信的核心。对于简单的的进程内或进程间通信,intent基本能够满足了。但是一些稍微复杂些的交互(如一些随时需要的控制请求)等,仅仅依靠intent这种...
  • Xbalien29
  • Xbalien29
  • 2013年04月06日 23:00
  • 11615

socket编程小问题:地址已经被使用——Address already in use

很多socket编程的初学者可能会遇到这样的问题:如果先ctrl+c结束服务器端程序的话,再次启动服务器就会出现Address already in use这个错误,或者你的程序在正常关闭服务器端so...
  • luckywang1103
  • luckywang1103
  • 2013年06月19日 20:44
  • 748

[编转]Android localsocket 的基础和使用实践: 02

ref:
  • yellow_hill
  • yellow_hill
  • 2014年10月09日 15:29
  • 656

Android localsocket 的基础和使用实践: 01

前言:介绍一种使用socket通信的方法可以使native和framework自由通信
  • yellow_hill
  • yellow_hill
  • 2014年09月24日 09:03
  • 1511

IPC通信方式之LocalSocket

LocalSocket作为一种IPC手段,在Android系统中也有使用,本文通过示例加深对LocalSocket的理解跟运用。...
  • azhengye
  • azhengye
  • 2017年07月05日 15:58
  • 642

android 中 LocalSocket的基本使用方法

其使用方式基本与Socket 的时候方法是一直的   package com.example.zz; import java.io.ByteArrayOutputStream; import jav...
  • qq_24551315
  • qq_24551315
  • 2015年09月09日 18:07
  • 204
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LocalSocket / LocalServerSocket
举报原因:
原因补充:

(最多只允许输入30个字)