Android 中的網路功能

Android

簡介

使用方法

開發工具

開始寫程式

視覺化介面

視覺元件

對話元件

核心物件

事件處理

資料儲存

查詢功能

影音功能

繪圖功能

網路功能

衛星地圖

特殊功能

資源管理

裝置管理

系統核心

問題與回答

刷機升級

常用軟體

Eclipse

教學錄影

訊息

相關網站

參考文獻

最新修改

簡體版

English

遠程呼叫 (Remote Procedure Calls — RPC)

Android 中所提供的遠程呼叫,是建構在 Java 的 AIDL 機制上的,以下是 AIDL 遠程呼叫的示意圖。

binder_rpc.png

圖一、AIDL 遠程呼叫的示意圖

http://stackoverflow.com/questions/2374080/android-client-server-app-bad-socket-exception

private static void startContextListener(){
 new Thread(){
  public void run(){
   try{
    while(contextsocket != null && !contextsocket.isClosed() && inContext.readObject() != null){
     kontext = (Kontext) inContext.readObject();
    }
   }
   catch(Exception e){
    Log.e(TAG, "startContextListener(): " + e.toString());
   }
  }
 }.start();
}

http://www.anddev.org/socket_programming-t325-s30.html

client in android 
package android.test; 

import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.net.UnknownHostException; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 

public class ClientTest extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
connectSocket(); 
} 

private void connectSocket() { 
// TODO Auto-generated method stub 
try { 
InetAddress serverAddr = InetAddress.getByName("10.66.3.44");//10.66.3.44 is my pc' IP 
Log.d("TCP", "C: Connecting..."); 
Socket socket = new Socket(serverAddr, 8221); 
String message = "Hello from Client android emulator"; 
try { 
Log.d("TCP", "C: Sending: '" + message + "'"); 
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true); 

out.println(message); 
Log.d("TCP", "C: Sent."); 
Log.d("TCP", "C: Done."); 

} catch(Exception e) { 
Log.e("TCP", "S: Error", e); 
} finally { 
socket.close(); 
} 

} catch (UnknownHostException e) { 
// TODO Auto-generated catch block 
Log.e("TCP", "C: UnknownHostException", e); 
e.printStackTrace(); 
} catch (IOException e) { 
// TODO Auto-generated catch block 
Log.e("TCP", "C: IOException", e); 
e.printStackTrace(); 
} 

} 
} 

server in pc 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class TCPDesktopServer implements Runnable{ 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 
new Thread(new TCPDesktopServer()).start(); 
} 

public void run() { 
// TODO Auto-generated method stub 
try { 
System.out.println("S: Connecting..."); 
ServerSocket serverSocket = new ServerSocket(8221); 
while (true) { 
Socket client = serverSocket.accept(); 
System.out.println("S: Receiving..."); 

try { 

BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
String str = in.readLine(); 
System.out.println("S: Received: '" + str + "'"); 

} catch(Exception e) { 
System.out.println("S: Error"); 
e.printStackTrace(); 

} finally { 
client.close(); 
System.out.println("S: Done."); 
} 
} 

} catch (IOException e) { 
// TODO Auto-generated catch block 
System.out.println("S: Error"); 
e.printStackTrace(); 
} 
} 

}
zhufan
Junior Developer

Posts: 13
Joined: Wed Nov 26, 2008 3:18 am

參考文獻

  1. http://developer.android.com/guide/topics/fundamentals.html

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License