バイトでAndroidを使ってるものの、使ってるライブラリが限られているのと、フレームワーク使ってる関係で、Androidの開発の仕方をだいぶ忘れてしまった気がする。そしてJavaも...リハビリもこめてちょっとプログラムを書いてみた。今回はServerSocketを使ってAndroid端末をサーバにしてみた。クライアントからは何も受け取らず、一方的に送信して終了。クライアントもJavaで書いてあるが、動作確認だけできればいいと思って書いたので、いい加減なプログラムなので注意。パーミッションにandroid.permission.INTERNETを加えることも忘れずに
まずはサーバプログラムから
package net.d_kami; import java.net.Socket; import java.net.ServerSocket; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class ServerTestActivity extends Activity implements Runnable{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView view = new TextView(this); try{ String ip = ServerTestActivity.getIPAddress(); view.setText(ip); Thread thread = new Thread(this); thread.start(); }catch(IOException e){ view.setText("IPアドレスの取得に失敗しました"); } setContentView(view); } public void run(){ ServerSocket server = null; Socket socket = null; BufferedWriter writer = null; try{ server = new ServerSocket(45678); while(true){ socket = server.accept(); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); writer.write("Hello World!\r\n"); writer.close(); socket.close(); } }catch(IOException e){ try{ if(writer != null){ writer.close(); } if(socket != null){ socket.close(); } if(server != null){ server.close(); } }catch(IOException ex){ Log.e(ex.getClass().getName(), ex.getMessage()); } Log.e(e.getClass().getName(), e.getMessage()); } } private static String getIPAddress() throws IOException{ Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while(interfaces.hasMoreElements()){ NetworkInterface network = interfaces.nextElement(); Enumeration<InetAddress> addresses = network.getInetAddresses(); while(addresses.hasMoreElements()){ String address = addresses.nextElement().getHostAddress(); //127.0.0.1と0.0.0.0以外のアドレスが見つかったらそれを返す if(!"127.0.0.1".equals(address) && !"0.0.0.0".equals(address)){ return address; } } } return "127.0.0.1"; } }
あと超手抜きのクライアントプログラム。使い方は
java Test Android端末のIPアドレス
Android端末のIPアドレスはサーバプログラムで取得してテキストビューで表示している。
import java.net.Socket; import java.io.InputStreamReader; import java.io.BufferedReader; public class Test{ public static void main(String[] args) throws Exception{ Socket socket = new Socket(args[0], 45678); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println(br.readLine()); br.close(); socket.close(); } }