안드로이드에서 사용가능한 통신의 종류는 몇가지 없다.
RPC
서버측 소켓통신 코드 ( 아래 )
public class TCPServer implements Runnable {
public static final int ServerPort = 9999;
public static final String ServerIP = "xxx.xxx.xxx.xxxx";
@Override
public void run() {
// TODO Auto-generated method stub
try {
System.out.println("S: Connecting...");
ServerSocket serverSocket = new ServerSocket(ServerPort);
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 + "'");
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(client.getOutputStream())),true);
out.println("Server Received " + str);
} catch (Exception e) {
System.out.println("S: Error");
e.printStackTrace();
} finally {
client.close();
System.out.println("S: Done.");
}
}
} catch (Exception e) {
System.out.println("S: Error");
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread desktopServerThread = new Thread(new TCPServer());
desktopServerThread.start();
}
}
안드로이드폰 소켓통신 코드 ( 아래 )
package socket.client; public class NewClient extends Activity { private String html = ""; private Handler mHandler; private Socket socket; private String name; private BufferedReader networkReader; private BufferedWriter networkWriter; private String ip = "xxx.xxx.xxx.xxx"; // IP private int port = 9999; // PORT번호 @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mHandler = new Handler(); try { setSocket(ip, port); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } checkUpdate.start(); final EditText et = (EditText) findViewById(R.id.EditText01); Button btn = (Button) findViewById(R.id.Button01); final TextView tv = (TextView) findViewById(R.id.TextView01); btn.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (et.getText().toString() != null || !et.getText().toString().equals("")) { PrintWriter out = new PrintWriter(networkWriter, true); String return_msg = et.getText().toString(); out.println(return_msg); } } }); } private Thread checkUpdate = new Thread() { public void run() { try { String line; Log.w("ChattingStart", "Start Thread"); while (true) { Log.w("Chatting is running", "chatting is running"); line = networkReader.readLine(); html = line; mHandler.post(showUpdate); } } catch (Exception e) { } } }; private Runnable showUpdate = new Runnable() { public void run() { Toast.makeText(NewClient.this, "Coming word: " + html, Toast.LENGTH_SHORT).show(); } }; public void setSocket(String ip, int port) throws IOException { try { socket = new Socket(ip, port); networkWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); networkReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); } catch (IOException e) { System.out.println(e); e.printStackTrace(); } } } |
AIDL : Android Interface Definition Language
- 서비스와 애플리케이션 콤포넌트간에 프로세스 간의 통신(IPC)을 지원하기 위한 안드로이드 인터페이스 정의 언어이다.
- 이것은 Remote Call Procedure(RPC)로 COM이나 Corba와 비슷하다.
커널 상위 프레임워크는 C/C++ 코드로 짜여진 라이브러리를 JNI로 호출하는 Java 코드들로 구성되어 있습니다.
속도 문제 해결과 동시에 Java 개발자들을 포섭하기 위한 전략으로 보여집니다.
그리고 특이하게도 Java VM이 아닌 Dalvik VM이 사용되는데, sun사의 라이선스 우회와 더불어 Java 코드의 최적화를 위해 VM을 직접 만든 것으로 보입니다.
따라서, javax.* 라이브러리 및 RMI 지원이 안됩니다. RPC 메커니즘으로 AIDL이라는 자체 스펙이 제공되는데.. 이것이 정확히 분산환경에서 사용될 수 있는지는 아직 확인 못 해봤습니다.
'프로그래밍' 카테고리의 다른 글
윈도우 xp image (0) | 2011.09.01 |
---|---|
[Java] DB 인스턴스 하나만 만들기 (0) | 2011.01.10 |
인사동 관광정보 홈페이지 기능추가 작업중 (0) | 2009.11.06 |
테이블 규모를 너무 크게 만들고 있는 것 같다. (0) | 2008.06.03 |
대략적인 작동 구조 설명 (0) | 2008.06.01 |