2015.05.15
【Android SDK】TCPクライアントを作る
なかなか面倒。
まずは自分がはまったところをあげておく。
・通信スレッドを新規作成すること
まずは簡単にActivity.onCreateのときに通信をはさんで動作チェックしようかなと思ったら
即座に例外が発生しActivityでは通信できない。
なので通信用スレッドを新規に作成して、通信処理を書かないといけない。
TCPの通信サンプルとしてはこんな感じ。
package info.malrone.tcptest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.util.Log;
public class TcpTest extends Thread {
private String m_szIp = "192.168.0.65"; //アクセス先IP
private int m_nPort = 12345; //アクセス先ポート
@Override
public void run()
{
try
{
//通信用ソケット作成
Socket socket = new Socket( m_szIp, m_nPort );
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
BufferedReader br = new BufferedReader( new InputStreamReader(in, "UTF-8") );
BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(out, "UTF-8") );
//テキストを送る
bw.write("Hello TCP\n");
//データを確定させて通信処理を起こさせる
bw.flush();
//相手からのデータ待ち
String szData = br.readLine();
//表示する
Log.d( "nya", "受信文字列:" + szData );
//後処理
in.close();
out.close();
socket.close();
}
catch( Exception e )
{
e.printStackTrace();
}
}
}
見てもらえばわかるのだが、一切Androidの機能を使わずJavaの機能だけで実装しています。
使っているのはデバッグ出力くらいかな。
なので詳しく機能を知りたい人はJavaの通信機能を調べるとよい。
今回は以前に書いたTCPサーバーに接続する感じで作っている。
Link:【Ruby】TCPサーバーを作る - ニャッキ格闘列伝
なのでテキストベースになるのでBufferedReaderとWriter経由してデータを取得している。
バイナリメインであればそのままStream経由でいいと思います。
Stream関係はバッファリングをしていることがよくあるので
即座に確定させたいときにはflush()を呼び出さないと通信処理などの
処理が起きないので注意です。
あとはActivityでスレッドを起動すればよい。
TcpTest tt = new TcpTest(); tt.start();
通信処理なので、AndroidManifest.xmlに通信許可もしておく。
<uses-permission android:name="android.permission.INTERNET"/>
もちろん、事前にTCPサーバーは立ち上げておかないといけない。
これでサーバーとの通信はできるようになりました。
しかし、Androidだとこれからの流れが大変だったりします。
[aws asin="4274064867"]







関連記事