《精通android網路開發》--使用Socket實現資料通訊

來源:互聯網
上載者:User

標籤:路由   nbsp   服務   傳輸過程   color   定位   ack   遍曆   str   

No1:

網路傳輸應用通常使用TCP、IP或UDP這三種協議實現資料轉送。在傳輸資料的過程中,需要通過一個雙向的通訊串連實現資料的互動。在這個傳輸過程中,通常將這個雙向鏈路的一端稱為Socket,一個Socket通常由一個IP地址和一個連接埠號碼來確定。

No2:

在網路編程中有兩個主要的問題,一個是如何準確地定位網路上的一台或多台主機,另一個就是找到主機後如何可靠高效地進行資料轉送。

在TCP/IP協議中IP層主要負責網路主機的定位,資料轉送的路由,由IP地址可以唯一地確定Internet上的一台主機。而TCP層則提供面嚮應用的可靠(TCP)的或非可靠(UDP)的資料轉送機制。

No3:

Socket工作過程基本步驟:

1)建立Socket

2)開啟串連到Socket的輸入/輸出流

3)按照一定的協議對Socket進行讀/寫操作

4)關閉Socket

No4:

聊天室程式在服務端包含多條線程,其中每個Socket對應一條線程,該線程負責讀取Socket對應輸入資料流的資料(從用戶端發送過來的資料),並將讀到的資料向每個Socket輸出資料流發送一遍(將衣蛾用戶端發送的資料“廣播”給其他用戶端),因此需要在伺服器端使用List來儲存所有的Socket。

public class IServer{    //定義儲存所有Socket的ArrayList    public static ArrayList<Socket> socketList = new ArrayList<Socket>();    public static void main(String[] args) throws IOException{        ServerSocket ss = new ServerSocket(3000);        while(true){            //此行代碼會阻塞,將一直等待別人的串連            Socket s = ss.accept();            socketList.add(s);            //每當用戶端串連後啟動一條ServerThread線程為該用戶端服務            new Thread(new Serverxian(s)).satart();        }    }}
//負責處理每個線程通訊的線程類public class Serverxian implements Runnable{    //定義當前線程所處理的Socket    Socket s = null;    //該線程所處理的Socket所對應的輸入資料流    BufferedReader br = null;    public Serverxian(Socket s) throws IOException{        this.s = s;        //初始化該Socket對應的輸入資料流        br = new BufferedReader(new InputStreamReader(s.getInputStream()));    }        public void run(){        try{            String content = null;            //採用迴圈不斷從Socket中讀取用戶端發送過來的資料            while((content = readFromClient())!=null){                //遍曆socketList中的每個Socket                //將讀到的內容向每個Socket發送一次                for(Socket s:IServer.socketList){                    PrintStream ps = new PrintStream(s.getOutputStream());                    ps.println(content);                }            }        }catch(IOException e){            //e.printStackTrace();        }    }    //定義讀取用戶端資料的方法    private String readFromClient(){        try{            return br.readLine();        }catch(IOException e){            //如果捕捉到異常,表明該Socket對應的用戶端已經關閉            //刪除該Socket            IServer.socketList.remove(s);        }        return null;    }}

 

《精通android網路開發》--使用Socket實現資料通訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.