標籤

2011年9月18日 星期日

Android TCP 傳送與接收

經過一整天的實驗, 終於讓 ANDROID 能夠順利接收 PC 端的通訊. 其通訊的原理, 是利用 JAVA 的通訊方式. 所以, 你必須 IMPORT JAVA 的功能.
如果你不知道如何設定 ANDROID 開發環境, 您可以參考 http://blog.chinatimes.com/tomsun/archive/2010/09/07/536320.html
孫傳雄先生寫的文章十分有幫助. 而您如果不習慣看網頁(那來這邊做什麼 笑), 您可以買 Gasolin 所寫的 "Google! Android 3" 放心, 國內早有翻譯. 松崗就有賣, 金石堂還打折呢.
要注意的重點是, "大小寫" 因為我曾經因為大小寫, 除錯了將近2小時. 最後才發現是大小寫的問題.
另一個要注意的事情是, 必須取得"上網權限" (靠.. 突然發現不能上傳圖片)....
好吧, 那就以文字表示吧. 在manifest.xml 那個檔案要注意取得上網權限. 要不然你測個一天也不會有結果. 還會懷疑自己是不是寫錯程式了 (笑)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.ivan.tcbus"
android:versionCode="1"
android:versionName="1.0" android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".TCBUSActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
以下就是經過一天實驗的結果.
package org.ivan.tcbus;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.app.Activity;
import android.widget.Button;
import android.widget.TextView;
import android.widget.EditText;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import org.ivan.tcbus.R;
public class TCBUSActivity extends Activity {
EditText editText1; // 文字方塊
TextView textView1; // 用來顯示文字訊息
private String address = "192.168.1.88";// 連線的ip
private int port = 1024;// 連線的port
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button buttom =(Button)findViewById(R.id.submit);
buttom.setOnClickListener(SServer);

textView1 = (TextView) findViewById(R.id.textView1);
}
private OnClickListener SServer = new OnClickListener(){
public void onClick(View arg0) {
EditText editText1 = (EditText)findViewById(R.id.editText1);
//String tmp; // 暫存文字訊息
String message="xxx";
// TODO Auto-generated method stub
try {
Socket socket = new Socket(address,port);
OutputStream ops=socket.getOutputStream();
DataOutputStream dos=new DataOutputStream(ops);
String tmp = editText1.getText().toString();
dos.write(tmp.getBytes());
dos.flush();
InputStream ops1=socket.getInputStream();
DataInputStream dos1 =new DataInputStream(ops1);
int result = dos1.available();
while(result==0){
result=dos1.available();
}
// 這一段是為什麼之前一直接收不到的原因, 請注意 byte[] data =new byte[result];
dos1.read(data);
message =new String(data);

System.out.println(message);
textView1.setText(message);
dos.close();
dos1.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
};

}
嗯, 可以上傳附件. 那就壓縮上傳吧

沒有留言:

張貼留言