摘要:前言這篇文章只是簡單的介紹通信,是一篇入門文章。首先一句話簡單的介紹網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個。通信客戶端的通信與服務端類似,獲取輸入流,讀取服務器發來的消息,并顯示到界面中。
前言
這篇文章只是簡單的介紹Socket通信,是一篇入門文章。所有還沒有接觸,但又想了解的可以參考下。希望對你們有所幫助。
Socket首先一句話簡單的介紹Socket:網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。
所有我們下面要建立一個服務端與客戶端的通信。
嘿嘿,其實上面的那句話是百度百科的,不知道你們發現了沒有服務端
這里我們只要新建了個簡單的Java類,只是實現開啟后等到客戶端的連接。
實例化ServerSocket綁定通信端口,最好端口設大點,防止端口被占用
java.net.ServerSocket serverSocket = new java.net.ServerSocket(30000);等待連接
我們這里設計了死循環,只要開啟了就一直等待客戶端的連接請求
while (true) { //接收連接請求 Socket s = serverSocket.accept(); list.add(s); //為每一個連接開啟一個的線程 new Thread(new ServiceRunnable(s)).start(); }
因為我實現的是在多線程下得通信,所有將每個Socket加入到List中并且為每一個連接的Socket開啟一個多帶帶的線程。
通信如何客戶端發來的消息,我們就向每一個連接的Socket發送該消息,所有首先要獲取輸入流
br = new BufferedReader(new InputStreamReader(s.getInputStream(), "utf-8"));
讀取數據
public String readContent() { try { return br.readLine(); } catch (IOException e) { list.remove(s); e.printStackTrace(); } return null; }
獲取輸出流發送消息
while ((content = readContent()) != null) { //遍歷所有連接了的Socket,向所有客戶端Socket發送消息 for (Iteratorit = 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(); } } }
服務端這樣就可以了,下面是客戶端
客戶端客戶端布局只要實現一個簡單的發送界面,這里就不多說了。直接說Socket。
建立連接指定服務主機名或IP地址與連接的端口號,應為是本地服務器所有這里直接使用本地IP地址。
socket = new Socket("192.168.56.1", 30000);通信
客戶端的通信與服務端類似,獲取輸入流,讀取服務器發來的消息,并顯示到界面中。
br = new BufferedReader(new InputStreamReader(socket.getInputStream())); new Thread(new Runnable() { String line; @Override public void run() { try { //讀取服務端發來的消息 while ((line = br.readLine()) != null) { Message message = new Message(); message.what = 1; message.obj = line; handler.sendMessage(message); } } catch (IOException e) { e.printStackTrace(); } } }).start();
點擊發送,獲取輸出流向服務器發送消息
@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 { //向服務端發送消息 pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); pw.println(msg.obj); } catch (IOException e) { e.printStackTrace(); } } } };
到此整個的Socket通信就基本上完成了。
總結通過上面的示例使用Socket實現通信,主要分為三步
實例化Socket,建立連接
獲取輸入流,讀取數據
獲取輸出流,發送數據
當然這只是一個簡單的例子,帶領我們入門而已。有興趣的可以借助下面的Demo學習。
Demo地址:https://github.com/idisfkj/So...
關注文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65977.html
摘要:什么是的中文翻譯過來就是套接字。套接字是什么,我們先來看看它的英文含義插座。服務端過程咱再來聊聊服務端的過程,服務端先初始化,建立流式套接字,與本機地址及端口進行綁定,然后通知,準備好接收連接,調用阻塞,等待來自客戶端的連接。 什么是 Socket? Socket 的中文翻譯過來就是套接字。套接字是什么,我們先來看看它的英文含義:插座。 Socket 就像一個電話插座,負責連通兩端的電...
摘要:什么是是一種在單個連接上進行全雙工通信的協議。短輪詢配段代碼,靜態服務中間件用來返回靜態文件當前價格是元獲取最新價格接口客戶端不停的發送請求,去服務端獲取最新價格。它通過連接到一個服務器,以格式接收事件不關閉連接。 什么是WebSocket? WebSocket是一種在單個TCP連接上進行全雙工通信的協議。這里我們發現了一個有趣的詞:全雙工,那我們就來簡單了解下通信方式有哪些! 單工 ...
摘要:什么是是一種在單個連接上進行全雙工通信的協議。短輪詢配段代碼,靜態服務中間件用來返回靜態文件當前價格是元獲取最新價格接口客戶端不停的發送請求,去服務端獲取最新價格。它通過連接到一個服務器,以格式接收事件不關閉連接。 什么是WebSocket? WebSocket是一種在單個TCP連接上進行全雙工通信的協議。這里我們發現了一個有趣的詞:全雙工,那我們就來簡單了解下通信方式有哪些! 單工 ...
摘要:在任何類型的通信開始之前,網絡應用程序必須創建套接字?;谖募奶捉幼郑易迕置诰W絡的套接字,家族名在和后續的版本中,支持的套接字有,,,。中的網絡編程在中主要是用模塊來實現基于套接字的網絡通信。 python學習記錄--網絡編程 1、套接字介紹 一臺機器上的不同進程之間進行通信可以利用隊列,管道等,但是不同機器之間的進程進行通信用隊列是不行的,解決這個問題就是網絡套接字。 套接...
閱讀 3161·2023-04-25 19:09
閱讀 3875·2021-10-22 09:54
閱讀 1743·2021-09-29 09:35
閱讀 2904·2021-09-08 09:45
閱讀 2232·2021-09-06 15:00
閱讀 2766·2019-08-29 15:32
閱讀 1029·2019-08-28 18:30
閱讀 370·2019-08-26 13:43