Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android中的Socket編程基礎

Android中的Socket編程基礎

編輯: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) {

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved