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だとこれからの流れが大変だったりします。

Pocket

ニャッキ格闘列伝 > プログラム >

前の記事:
次の記事:

コメントリスト

コメントなし

コメント



*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

こんなタグが使えるみたいよ:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>