編輯:Android開發教程
Socket 編程基礎知識:
主要分服務器端編程和客戶端編程。
服務器端編程步驟:
1: 創建服務器端套接字並綁定到一個端口上(0-1023是系統預留的,最好大約1024)
2 : 套接字設置監聽模式等待連接請求
3: 接受連接請求後進行通信
4: 返回,等待贏 一個連接請求
客戶端編程步驟:
1: 創建客戶端套接字(指定服務器端IP地址與端口號 )
2: 連接(Android 創建Socket時會自動連接)
3: 與服務器端進行通信
4: 關閉套接字
Android Socket 通信原理注意:
1: 中間的管道連接是通過 InputStream/OutputStream流實現的。
2: 一旦管道建立起來可進行通信
3: 關閉管道 的同時意味著關閉Socket
4: 當對同一個Socket創建重復管道時會異常
5: 通信過程中 順序很重要:服務器端首先得到輸入流,然後將輸入流信息輸出到其各個客戶端
客戶端先建立連 接後先寫入輸出流,然後再獲得輸入流。不然活有EOFException的異常。
不要忘記添加Internet權限 ,不要忘記添加Internet權限,不要忘記添加Internet權限
服務器端代碼的編寫:
import
java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server {
static ServerSocket aServerSocket = null; // Server Socet.
DataInputStream aDataInput = null; // Server input Stream that to
// receive msg from client.
DataOutputStream aDataOutput = null; // Server output Stream that to
static ArrayList list = new ArrayList();
public static void main(String[] args) {
try {
aServerSocket = new ServerSocket(50003); // listen 8888 port.
System.out.println("already listen 50003 port.");
} catch (Exception e) {
e.printStackTrace();
}
int num = 0;
while (num < 10) {
Socket aSessionSoket = null;
try {
aSessionSoket = aServerSocket.accept();
MyThread thread = new Server().new MyThread(aSessionSoket);
thread.start();
num = list.size();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
class MyThread extends Thread {
Socket aSessionSoket = null;
public MyThread(Socket socket) {
aSessionSoket = socket;
}
public void run() {
try {
aDataInput = new DataInputStream(aSessionSoket.getInputStream());
aDataOutput = new DataOutputStream(aSessionSoket.getOutputStream());
list.add(aDataOutput);
while (true) {
String msg = aDataInput.readUTF(); // read msg.
if (!msg.equals("connect...")) {
System.out.println("ip: "+ aSessionSoket.getInetAddress());// ip.System.out.println("receive
msg: " + msg);
for (int i = 0; i < list.size(); i++) {
DataOutputStream output = (DataOutputStream) list.get(i);
output.writeUTF(msg + "----" + list.size());
}
if (msg.equals("end"))
break;
}
aDataOutput.writeUTF("");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
aDataInput.close();
if (aDataOutput != null)
aDataOutput.close();
list.remove(aDataOutput);
aSessionSoket.close();
} catch (Exception e2) {
詳解Android中的ContentProvider和Uri
一、使用ContentProvider(內容提供者)共享數據ContentProvider在android中的作用是對外共 享數據,也就是說你可以通過ContentPro
Android開發入門(十二)列表控件 12.2 ListView的擴展功能
ListView是一個可以被深度擴展的視圖。在做項目的時候,擴展ListView去顯示數據是必不可免的。接下 來會展示如何在ListView中去選擇多個物件,以及如何使用
Android開發入門(九)用戶界面 9.3 注冊事件監聽器
當用戶與視圖views進行交互的時候,views也會觸發事件。舉個例子,當用戶點擊了一個按鈕,你需要為 這個事件服務,只有這樣,才能去執行某些適當的行為。如果想這麼做的話
Android UI設計與開發教程 引導界面(二)使用ViewPager實現歡迎引導頁面
本系列文章都會以一個程序的實例開發為主線來進行講解,以求達到一個循序漸進的學習效果,這樣更能 加深大家對於程序為什麼要這樣寫的用意,理論加上實際的應用才能達到事半功倍的