手機連線程式範例

手機連線程式範例----------

 這一章,我們將為大家示範簡單的手機連線功能。
首先請看範例一,如下圖:
Client.JPG
圖1-1
這是一個最簡單的連線程式,其功能為連上伺服器後,伺服器回傳一行字串”Hello!This is sever msg。”
以下將為各位分別列出手機客戶端與伺服器的完整程式。

 範例一:客戶端
專案下載:ClientSocketDemo1.rar

package ccc.ClientSocketDemo1; // 這是命名空間
// 這裡是引用java的類別庫
import android.app.Activity;        
import android.os.Bundle;            
import android.widget.TextView;        
import java.io.BufferedReader;        // 引用串流功能 
import java.io.IOException;            // 引用IO例外功能
import java.io.InputStreamReader;    // 引用輸入串流讀取功能 
import java.net.InetAddress;        // 引用網路IP位址功能
import java.net.Socket;                // 引用Socket網路功能
 
public class ClientSocketDemo1 extends Activity {
    @Override
 
    // 程式進入點
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        // 文字方塊
        TextView TextView01 =(TextView)findViewById(R.id.TextView01);
 
        // 用來存放伺服器IP位址的變數
        InetAddress serverIp;
 
        // 嘗試連接Server
        try {
            // 設定IP
            serverIp = InetAddress.getByName("192.168.60.251");
 
            // 設定port
            int serverPort=5050;
 
            // 初始socket連接
            Socket clientSocket=new Socket(serverIp,serverPort);
 
            // 接收來自Server的訊息 
            BufferedReader  br=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
 
            // 顯示收到的訊息
            TextView01.setText( br.readLine());
 
            // 關閉連線
            clientSocket.close(); 
        } catch (IOException e) {
            // 出錯後顯示錯誤訊息
            TextView01.setText( "Connect error.");
        }
    }
}

 main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:id="@+id/TextView01" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
</LinearLayout>

 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="ccc.ClientSocketDemo1"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".ClientSocketDemo1"
                  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>
    <uses-sdk android:minSdkVersion="4" />
 
    <!-- 這是註解 -->
    <uses-permission android:name="android.permission.INTERNET" />  
    <!--  由於需使用到網路的功能,所以必須加上面這行來取得權限-->
</manifest>

 範例’一:伺服端
SocketServerDemo1.rar

import java.io.BufferedWriter;        // 引用串流功能
import java.io.IOException;            // 引用例外功能
import java.io.OutputStreamWriter;    // 引用輸出串流功能
import java.net.ServerSocket;         // 引用伺服器socket
import java.net.Socket;                // 引用Socket網路功能
public class SocketServerDemo1 {
    // 宣告一個靜態的server socket
    private static ServerSocket serverSocket;
 
    // 程式進入點
    public static void main(String[] args) {
 
        // 設定port
        int port=5050;
 
        // 嘗試Listen一個連線
        try {
 
            // 初始化Server Socket 
            serverSocket =new ServerSocket(port);
 
            // 輸出"伺服器已啟動"
            System.out.println("Server is start.");
 
            // 接受來自客戶端的連線
            Socket socket=serverSocket.accept();
 
            // 初始化輸出網路串流
            BufferedWriter bw=    new BufferedWriter( new OutputStreamWriter(socket.getOutputStream()));
 
            // 傳送訊息到客戶端
            bw.write("Hello! This is sever msg.\n");
 
            // 立即送出
            bw.flush();
        } catch (IOException e) {
            // 如果失敗則顯示"Socket Error"
            System.out.println("Socket ERROR");
        }
 
        // 顯示結束連線
        System.out.println("Socket is End");
    }
}

 程式影片解說