摘要:前言這篇文章只是簡單的介紹通信,是一篇入門文章。首先一句話簡單的介紹網(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 (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(); } } }
服務(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
摘要:什么是的中文翻譯過來就是套接字。套接字是什么,我們先來看看它的英文含義插座。服務(wù)端過程咱再來聊聊服務(wù)端的過程,服務(wù)端先初始化,建立流式套接字,與本機地址及端口進行綁定,然后通知,準備好接收連接,調(diào)用阻塞,等待來自客戶端的連接。 什么是 Socket? Socket 的中文翻譯過來就是套接字。套接字是什么,我們先來看看它的英文含義:插座。 Socket 就像一個電話插座,負責連通兩端的電...
摘要:什么是是一種在單個連接上進行全雙工通信的協(xié)議。短輪詢配段代碼,靜態(tài)服務(wù)中間件用來返回靜態(tài)文件當前價格是元獲取最新價格接口客戶端不停的發(fā)送請求,去服務(wù)端獲取最新價格。它通過連接到一個服務(wù)器,以格式接收事件不關(guān)閉連接。 什么是WebSocket? WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議。這里我們發(fā)現(xiàn)了一個有趣的詞:全雙工,那我們就來簡單了解下通信方式有哪些! 單工 ...
摘要:什么是是一種在單個連接上進行全雙工通信的協(xié)議。短輪詢配段代碼,靜態(tài)服務(wù)中間件用來返回靜態(tài)文件當前價格是元獲取最新價格接口客戶端不停的發(fā)送請求,去服務(wù)端獲取最新價格。它通過連接到一個服務(wù)器,以格式接收事件不關(guān)閉連接。 什么是WebSocket? WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議。這里我們發(fā)現(xiàn)了一個有趣的詞:全雙工,那我們就來簡單了解下通信方式有哪些! 單工 ...
摘要:在任何類型的通信開始之前,網(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ò)套接字。 套接...
閱讀 3179·2023-04-25 19:09
閱讀 3888·2021-10-22 09:54
閱讀 1764·2021-09-29 09:35
閱讀 2919·2021-09-08 09:45
閱讀 2264·2021-09-06 15:00
閱讀 2775·2019-08-29 15:32
閱讀 1042·2019-08-28 18:30
閱讀 376·2019-08-26 13:43