成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Socket的簡單通信

Atom / 2970人閱讀

摘要:前言這篇文章只是簡單的介紹通信,是一篇入門文章。首先一句話簡單的介紹網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個。通信客戶端的通信與服務(wù)端類似,獲取輸入流,讀取服務(wù)器發(fā)來的消息,并顯示到界面中。

前言

這篇文章只是簡單的介紹Socket通信,是一篇入門文章。所有還沒有接觸,但又想了解的可以參考下。希望對你們有所幫助。

Socket

首先一句話簡單的介紹Socket:網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個socket。
所有我們下面要建立一個服務(wù)端與客戶端的通信。

嘿嘿,其實上面的那句話是百度百科的,不知道你們發(fā)現(xiàn)了沒有
服務(wù)端

這里我們只要新建了個簡單的Java類,只是實現(xiàn)開啟后等到客戶端的連接。

實例化ServerSocket

綁定通信端口,最好端口設(shè)大點,防止端口被占用

                    java.net.ServerSocket serverSocket = new java.net.ServerSocket(30000);
等待連接

我們這里設(shè)計了死循環(huán),只要開啟了就一直等待客戶端的連接請求

while (true) {
                        //接收連接請求
                        Socket s = serverSocket.accept();
                        list.add(s);
                        //為每一個連接開啟一個的線程
                        new Thread(new ServiceRunnable(s)).start();
                    }

因為我實現(xiàn)的是在多線程下得通信,所有將每個Socket加入到List中并且為每一個連接的Socket開啟一個多帶帶的線程。

通信

如何客戶端發(fā)來的消息,我們就向每一個連接的Socket發(fā)送該消息,所有首先要獲取輸入流

            br = new BufferedReader(new InputStreamReader(s.getInputStream(), "utf-8"));

讀取數(shù)據(jù)

        public String readContent() {
            try {
                return br.readLine();
            } catch (IOException e) {
                list.remove(s);
                e.printStackTrace();
            }
            return null;
        }

獲取輸出流發(fā)送消息

while ((content = readContent()) != null) {
                //遍歷所有連接了的Socket,向所有客戶端Socket發(fā)送消息
                for (Iterator it = list.iterator(); it.hasNext(); ) {
                    Socket socket = it.next();
                    try {
                        pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                        pw.println(content);
                    } catch (IOException e) {
                        it.remove();
                        e.printStackTrace();
                    }
                }
            }

服務(wù)端這樣就可以了,下面是客戶端

客戶端

客戶端布局只要實現(xiàn)一個簡單的發(fā)送界面,這里就不多說了。直接說Socket

建立連接

指定服務(wù)主機名或IP地址與連接的端口號,應(yīng)為是本地服務(wù)器所有這里直接使用本地IP地址。

socket = new Socket("192.168.56.1", 30000);
通信

客戶端的通信與服務(wù)端類似,獲取輸入流,讀取服務(wù)器發(fā)來的消息,并顯示到界面中。

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

                new Thread(new Runnable() {
                    String line;

                    @Override
                    public void run() {
                        try {
                            //讀取服務(wù)端發(fā)來的消息
                            while ((line = br.readLine()) != null) {
                                Message message = new Message();
                                message.what = 1;
                                message.obj = line;
                                handler.sendMessage(message);
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();                

點擊發(fā)送,獲取輸出流向服務(wù)器發(fā)送消息

    @Override
    public void onClick(View v) {
        Message message = new Message();
        message.what = 2;
        message.obj = et.getText().toString();
        clientThread.clientHandler.sendMessage(message);
        et.setText("");
    }
clientHandler = new Handler(Looper.getMainLooper()) {
                    @Override
                    public void handleMessage(Message msg) {
                        if (msg.what == 2) {
                            try {
                                //向服務(wù)端發(fā)送消息
                                pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
                                pw.println(msg.obj);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                };

到此整個的Socket通信就基本上完成了。

總結(jié)

通過上面的示例使用Socket實現(xiàn)通信,主要分為三步

實例化Socket,建立連接

獲取輸入流,讀取數(shù)據(jù)

獲取輸出流,發(fā)送數(shù)據(jù)

當然這只是一個簡單的例子,帶領(lǐng)我們?nèi)腴T而已。有興趣的可以借助下面的Demo學習。

Demo地址:https://github.com/idisfkj/So...

關(guān)注

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65977.html

相關(guān)文章

  • Socket 通信原理

    摘要:什么是的中文翻譯過來就是套接字。套接字是什么,我們先來看看它的英文含義插座。服務(wù)端過程咱再來聊聊服務(wù)端的過程,服務(wù)端先初始化,建立流式套接字,與本機地址及端口進行綁定,然后通知,準備好接收連接,調(diào)用阻塞,等待來自客戶端的連接。 什么是 Socket? Socket 的中文翻譯過來就是套接字。套接字是什么,我們先來看看它的英文含義:插座。 Socket 就像一個電話插座,負責連通兩端的電...

    Michael_Lin 評論0 收藏0
  • 你不知道WebSocket嗎?

    摘要:什么是是一種在單個連接上進行全雙工通信的協(xié)議。短輪詢配段代碼,靜態(tài)服務(wù)中間件用來返回靜態(tài)文件當前價格是元獲取最新價格接口客戶端不停的發(fā)送請求,去服務(wù)端獲取最新價格。它通過連接到一個服務(wù)器,以格式接收事件不關(guān)閉連接。 什么是WebSocket? WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議。這里我們發(fā)現(xiàn)了一個有趣的詞:全雙工,那我們就來簡單了解下通信方式有哪些! 單工 ...

    techstay 評論0 收藏0
  • 你不知道WebSocket嗎?

    摘要:什么是是一種在單個連接上進行全雙工通信的協(xié)議。短輪詢配段代碼,靜態(tài)服務(wù)中間件用來返回靜態(tài)文件當前價格是元獲取最新價格接口客戶端不停的發(fā)送請求,去服務(wù)端獲取最新價格。它通過連接到一個服務(wù)器,以格式接收事件不關(guān)閉連接。 什么是WebSocket? WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議。這里我們發(fā)現(xiàn)了一個有趣的詞:全雙工,那我們就來簡單了解下通信方式有哪些! 單工 ...

    remcarpediem 評論0 收藏0
  • python網(wǎng)絡(luò)編程

    摘要:在任何類型的通信開始之前,網(wǎng)絡(luò)應(yīng)用程序必須創(chuàng)建套接字。基于文件的套接字,家族名又名基于網(wǎng)絡(luò)的套接字,家族名在和后續(xù)的版本中,支持的套接字有,,,。中的網(wǎng)絡(luò)編程在中主要是用模塊來實現(xiàn)基于套接字的網(wǎng)絡(luò)通信。 python學習記錄--網(wǎng)絡(luò)編程 1、套接字介紹 一臺機器上的不同進程之間進行通信可以利用隊列,管道等,但是不同機器之間的進程進行通信用隊列是不行的,解決這個問題就是網(wǎng)絡(luò)套接字。 套接...

    xuhong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<