伺服器廣播程式範例
範例二-伺服器廣播程式
連線程式的伺服器有很多時候都必須用到廣播的功能,以下就為各位示範基礎的伺服器廣播程式。
圖1-2為伺服器執行成功的畫面,可以看到下方的訊息欄顯示"Server is start. Wait client connect",也就是持續等待客戶端連入。
圖1-2
圖1-3為使用模擬器開啟客戶端後連入伺服器的展示圖,可以看到下方訊息欄除了一開始的"Server is start. Wait client connect"外,還出現了"Server:",用意在於讓伺服端可以輸入欲廣播的訊息,讓伺服器廣播給客戶端。

圖1-3
以下為客戶端與伺服端的程式碼
廣播程式-客戶端
專案下載:ClientSocketDemo2.rar
package ccc.ClientSocketDemo2; import android.app.Activity; import android.os.Bundle; import android.os.Handler; // 引用Hander import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.Socket; import ccc.ClientSocketDemo2.R; // ????????? public class ClientSocketDemo2 extends Activity { public static Handler mHandler = new Handler(); TextView TextView01; String tmp; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView01 =(TextView)findViewById(R.id.TextView01); // 初始化執行緒 Thread t=new Thread(readData); t.start(); } // 用來更新文字方塊中的文字 private Runnable updateText = new Runnable() { public void run() { TextView01.append(tmp+"\n"); } }; // Listen private Runnable readData = new Runnable() { public void run() { InetAddress serverIp; try { serverIp = InetAddress.getByName("192.168.60.251"); int serverPort=5050; Socket clientSocket=new Socket(serverIp,serverPort); BufferedReader br=new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); // 當連接成功的時候接收傳來的訊息 while(clientSocket.isConnected()){ tmp= br.readLine(); mHandler.post(updateText); } } catch (IOException e) { } } }; }
廣播程式-伺服器
SocketServerDemo2.rar
import java.io.BufferedReader; // 引用讀取串流 import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; // 引用串流讀取 import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketServerDemo2 { private static ServerSocket serverSocket; public static void main(String[] args) { int port=5050; try { serverSocket = new ServerSocket(port); System.out.println("Server is start.Wait clinet connect"); Socket socket = serverSocket.accept(); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())); bw.write("Hello! This is sever msg.\n"); bw.flush(); // 當連線成功時不斷執行 while(socket.isConnected()){ // 初始化從鍵盤讀取文字功能 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); System.out.printf("Server:"); // 傳送鍵盤輸入的訊息 bw.write(br.readLine()+"\n"); // 立即傳送 bw.flush(); } } catch (IOException e) { System.out.println("Socket ERROR"); } System.out.println("Socket is End"); } }
Activity介面程式碼
<?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.ClientSocketDemo2" 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>
程式影片解說
page revision: 46, last edited: 26 May 2011 01:31
我想請問一下
這可以在手機上實現應用嗎
SERVER 端那要怎麼執行呢?
Post preview:
Close preview