標籤:
前一篇講了Android的網路編程基礎,今天寫了一個簡單的聊天程式分享一下
首先是服務端代碼:
1 package com.jiao.socketdemo; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.OutputStreamWriter; 8 import java.net.ServerSocket; 9 import java.net.Socket;10 11 public class ChatServer extends Thread {12 private ServerSocket server = null;13 private static final int PORT = 5550;14 private BufferedWriter writer;15 private BufferedReader reader;16 17 public ChatServer() throws IOException {18 19 CreateSocket();//初始化socket20 }21 22 @Override23 public void run() {24 25 Socket client;26 String txt;27 28 try {29 while (true) {30 // 擷取應答訊息31 client = ResponseSocket();32 while (true) {33 // 接受用戶端資訊34 txt = ReceiveMsg(client);35 36 System.out.println("用戶端發來的訊息:" + txt);37 38 SendMsg(client, txt);39 40 if (true)41 break;42 }43 CloseSocket(client);44 }45 } catch (Exception e) {46 // TODO: handle exception47 }48 49 }50 51 //關閉串連52 private void CloseSocket(Socket client) throws IOException {53 reader.close();54 writer.close();55 client.close();56 57 }58 59 //封裝發送訊息的方法60 private void SendMsg(Socket socket, String Msg) throws IOException {61 writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));62 writer.write(Msg + "\n");63 writer.flush();64 }65 66 //封裝接受訊息的方法67 private String ReceiveMsg(Socket socket) throws IOException {68 reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));69 String txt = reader.readLine();70 return txt;71 }72 73 //接受訊息74 private Socket ResponseSocket() throws IOException {75 Socket client = server.accept();76 return client;77 }78 79 //初始化socket80 private void CreateSocket() throws IOException {81 server = new ServerSocket(PORT, 100);82 }83 84 }
啟動服務端的代碼如下:
1 // 建立聊天伺服器2 ChatServer chatserver = new ChatServer();3 // 檢測伺服器是否已經啟動,如果沒有則啟動伺服器4 if (chatserver != null) {5 chatserver.start();6 }
以下是用戶端的代碼:
1 package com.example.socketclient; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.OutputStreamWriter; 8 import java.net.Socket; 9 import java.net.UnknownHostException;10 import android.app.Activity;11 import android.os.Bundle;12 13 public class MainActivity extends Activity {14 public static int SERVER_PORT = 5550;15 16 @Override17 protected void onCreate(Bundle savedInstanceState) {18 super.onCreate(savedInstanceState);19 setContentView(R.layout.activity_main);20 21 new Thread() {22 public void run() {23 message();24 }25 }.start();26 }27 28 private void message() {29 try {30 Socket client = RequestSocket("這裡是伺服器的IP", SERVER_PORT);31 SendMsg(client, "client send");32 String txt = ReceiveMsg(client);33 System.out.println("服務端返回資料:" + txt);34 } catch (Exception e) {35 36 }37 };38 39 // 用戶端擷取訊息類40 private Socket RequestSocket(String host, int port)throws UnknownHostException, IOException {41 Socket socket = new Socket(host, port);42 return socket;43 }44 45 // 用戶端發送訊息類46 private void SendMsg(Socket socket, String msg) throws IOException {47 // 將要發送的訊息寫入Buffer 中48 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));49 // 格式轉換50 writer.write(msg.replace("\n", " ") + "\n");51 // 重新整理,發送52 writer.flush();53 }54 55 // 用戶端接收訊息56 private String ReceiveMsg(Socket socket) throws IOException {57 // 寫入讀Buffer 中// 擷取接收的訊息到資料流中58 BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));59 // 讀取訊息到字串中60 String Msg = reader.readLine();61 // 以字串的方式返回訊息62 return Msg;63 }64 65 }
Android 網路編程基礎之簡單聊天程式