• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 使用Android網絡編程實現簡易聊天室

    發表于:2013-07-19來源:Csdn作者:孤云點擊數: 標簽:Android
    在Java中我們可以利用socket編程實現聊天室,在Android中也一樣,因為Android完全支持JDK本身的TCP、UDP網絡通信API。我們可以使用ServerSocket、Socket來建立基于TCP/IP協議的網絡通信;也可以使用DatagramSocket、Datagrampacket、MulticastSocket來建立基于

      在Java中我們可以利用socket編程實現聊天室,在Android中也一樣,因為Android完全支持JDK本身的TCP、UDP網絡通信API。我們可以使用ServerSocket、Socket來建立基于TCP/IP協議的網絡通信;也可以使用DatagramSocket、Datagrampacket、MulticastSocket來建立基于UDP協議的網絡通信。下面實現一個簡單的聊天室,服務器端完全用Java代碼實現,跟Android無關,客戶端用Android應用來實現。

      服務器不斷讀取來自客戶端的信息,并即時地將信息發送給每個連接到本服務器上的客戶端,每個客戶端可以向服務器發送消息,并不斷地接收來自服務器的消息,并將消息顯示在界面上。這樣就實現了客戶端與客戶端之間的即時聊天功能,為簡便起見,本文中只寫了一個客戶端,代碼如下:

      服務器端:

      創建服務器的主類:

      [java] view plaincopyprint?

      package com.home.server;

      import java.io.IOException;

      import java.net.ServerSocket;

      import java.net.Socket;

      import java.util.ArrayList;

      public class MyServer {

      // 定義保存所有Socket的集合

      public static ArrayList socketList = new ArrayList();

      public static void main(String[] args) throws IOException {

      ServerSocket ss = new ServerSocket(20000);

      System.out.println("服務器創建成功!");

      System.out.println("等待客戶端的連接。。。");

      while (true) {

      // 此行代碼會阻塞,等待用戶的連接

      Socket socket = ss.accept();

      System.out.println("有客戶端連接進來!");

      socketList.add(socket);

      // 每當客戶端連接后啟動一條ServerThread線程為該客戶端服務

      new Thread(new ServerThread(socket)).start();

      }

      }

      }

      package com.home.server;

      import java.io.IOException;

      import java.net.ServerSocket;

      import java.net.Socket;

      import java.util.ArrayList;

      public class MyServer {

      // 定義保存所有Socket的集合

      public static ArrayList socketList = new ArrayList();

      public static void main(String[] args) throws IOException {

      ServerSocket ss = new ServerSocket(20000);

      System.out.println("服務器創建成功!");

      System.out.println("等待客戶端的連接。。。");

      while (true) {

      // 此行代碼會阻塞,等待用戶的連接

      Socket socket = ss.accept();

      System.out.println("有客戶端連接進來!");

      socketList.add(socket);

      // 每當客戶端連接后啟動一條ServerThread線程為該客戶端服務

      new Thread(new ServerThread(socket)).start();

      }

      }

      }

      服務器的線程類:

      [java] view plaincopyprint?

      package com.home.server;

      import java.io.BufferedReader;

      import java.io.IOException;

      import java.io.InputStreamReader;

      import java.io.OutputStream;

      import java.net.Socket;

      public class ServerThread implements Runnable {

      // 定義當前線程所處理的Socket

      private Socket socket = null;

      // 該線程所處理的Socket所對應的輸入流

      BufferedReader br = null;

      public ServerThread(Socket socket) throws IOException {

      this.socket = socket;

      // 初始化該Socket對應的輸入流

      br = new BufferedReader(new InputStreamReader(socket.getInputStream(),

      "utf-8"));

      }

      @Override

      public void run() {

      try {

      String content = null;

      // 采用循環不斷從Socket中讀取客戶端發送過來的數據

      while ((content = readFromClient()) != null) {

      // 遍歷socketList中的每個Socket,將讀到的內容向每個Socket發送一次

      for (Socket s : MyServer.socketList) {

      OutputStream os = s.getOutputStream();

      os.write((content + "\n").getBytes("utf-8"));

      }

      }

      } catch (Exception e) {

      e.printStackTrace();

      }

      }

      /**

      * 定義讀取客戶端數據的方法

      *

      * @return

      */

      private String readFromClient() {

      try {

      return br.readLine();

      }

      // 如果捕捉到異常,表明該Socket對應的客戶端已經關閉

      catch (Exception e) {

      // 刪除該Socket

      MyServer.socketList.remove(socket);

      e.printStackTrace();

      }

      return null;

      }

      }

      package com.home.server;

      import java.io.BufferedReader;

      import java.io.IOException;

      import java.io.InputStreamReader;

      import java.io.OutputStream;

    原文轉自:http://blog.csdn.net/u010142437/article/details/9327541

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>