編輯:Android開發實例
前言
本章內容android.net.LocalSocket章節,版本為Android 4.0 r1,翻譯來自:"水中影"。
LocalSocket
譯者署名:水中影
譯者鏈接:http://www.cnblogs.com/gosunriver/
版本:Android 4.0 r1
結構
繼承關系
public class LocalSocket extends Object
java.lang.Object
android.net.LocalSocket
類概述
在UNIX域名空間內創建一個socket(非服務器),這種類型的socket完全不同於java.net.socket。
構造函數
public LocalSocket ()
創建一個AF_LOCAL/UNIX 套接字。
公共方法
public void bind (LocalSocketAddress bindpoint)
綁定socket到一個端口。僅可由還沒有被綁定的實體對象來調用該方法。
參數
bindpoint 端口地址
異常
IOException
public void close ()
關閉socket
異常
IOException
public void connect (LocalSocketAddress endpoint)
將當前socket連接到一個端口,只有當終端地址還沒有被連接的情況下才能調用該函數。
參數
endpoint 端口地址
異常
IOException 如果socket 是無效的或地址不存在。
public void connect (LocalSocketAddress endpoint, int timeout)
將當前socket連接到一個端口。
異常
IOException 如果socket 是無效的或地址不存在。
public FileDescriptor[] getAncillaryFileDescriptors ()
獲取一組由對端通過附加消息傳送過來的文件描述符。這個方法會返回最近發送的文件描述符,並且返回空直到收到一個新的描述符。文件描述符僅可以通過常規數據傳送,此方法讀取一個描述符後僅能返回非空值。
返回值
空或者文件描符數組
異常
IOException
public FileDescriptor getFileDescriptor ()
返回文件描述符,如果文件沒有打開或已關閉則返回空。
返回值
文件描述符或空值
public InputStream getInputStream ()
獲取輸入流。
返回值
input stream對象
異常
若socket已經關閉或者還沒建立則拋出IO異常
public LocalSocketAddress getLocalSocketAddress ()
若存在則返回綁定的socket。
返回值
本地socket地址,若匿名則返回空。
public OutputStream getOutputStream ()
獲取輸出流
返回值
輸出流
異常
若socket已經關閉或者還沒建立則拋出IO異常
public Credentials getPeerCredentials ()
獲取socket對的認證信息。僅對已連接的套接字有效。
返回值
非空; 認證信息
異常
IOException
public int getReceiveBufferSize ()
(譯者注:獲取接受緩沖區大小)
異常
IOException
public LocalSocketAddress getRemoteSocketAddress ()
(譯者注:獲取socket連接端地址)
public int getSendBufferSize ()
(譯者注:獲取發送緩沖區大小)
異常
IOException
public int getSoTimeout ()
(譯者注:得到遠端超時設置)
異常
IOException
public synchronized boolean isBound ()
(譯者注:是否已經綁定)
public boolean isClosed ()
(譯者注:是否已經關閉連接)
public synchronized boolean isConnected ()
(譯者注:是否已連接)
public boolean isInputShutdown ()
(譯者注:輸入流是否已關閉)
public boolean isOutputShutdown ()
(譯者注:輸出流是否已關閉)
public void setFileDescriptorsForSend (FileDescriptor[] fds)
將一組文件描述符放入隊列准備發送到對端(socket),這些文件描述符在下次發送普通數據時會作為單個輔助消息一同發送出去,請查看桌面linux 系統的“main 7 unix” 的SCM_RIGHT。
參數
Fds 非空,待發送的文件描述符數組。
public void setReceiveBufferSize (int size)
(譯者注:設置接受緩沖區大小)
異常
IOException
public void setSendBufferSize (int n)
(譯者注:設置發送緩沖區大小)
異常
IOException
public void setSoTimeout (int n)
(譯者注:設置遠端超時設置)
異常
IOException
public void shutdownInput ()
關閉輸入端socket
異常
IOException
public void shutdownOutput ()
關閉輸出端socket
異常
IOException
補充
文章精選
[推薦]OPhone OS的網絡層架構介紹
示例代碼
Android LocalSocket / LocalServerSocket sample code
Platforms: Android SDK 1.0 (Eclipse 3.4.1 + ADT 0.8.0)
main.xml
<Button android:id="@+id/send_1_button"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="send 1 request"/>
java文件:
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());
}
}
});
}
}
首先先建布局文件,界面很簡單,就是一個搜索框和下面的聯系人列表: 代碼如下: <?xml version=1.0 encoding=utf-8?
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
今天根據騰訊qq,我們做一個練習,來學習如何制作一個漂亮的布局。首先看一下官方圖片 還是一個啟動畫面,之後進入登錄頁面,導航頁面就不介紹了,大家可以參考微信的導
前面文章講解了Android的藍牙基本用法,本文講得深入些,探討下藍牙方面的隱藏API。用過Android系統設置(Setting)的人都知道藍牙搜索之後可以建立