Java 實現socket 與伺服器實現實時通訊
現在有一個需求,就是要去給一臺客戶端主動去傳送指令,或者推送訊息,就尋求朋友問了問告訴我說socket可以實現,所以就在網上找了些資料一遍學習,一遍測試,現在把我最後的成果記錄下來。
如果對於socket有概念上的不理解的話,可以去百度一下會有很多答案,而且都比較詳細,就不多贅述了。
首先你要先明白你的網路環境(你需要以TCP協議還是UDP協議來互動socket預設是用TCP的,因為我的環境問題使用的UDP),區別服務端和客戶端,我寫了兩個工具類,一個是服務端,一個是客戶端的,主要都是通過輸入輸出流來互動資訊。
程式碼如下:
服務端:
package com.yyg.utils.socket; import org.apache.log4j.Logger; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; /** * 服務端 */ public class SocketServerUtil { private Logger log = Logger.getLogger(SocketServerUtil.class); public static final Integer port = 9001; public void init () { try { //建立一個ServerSocket,port是客戶端的埠 ServerSocket serverSocket = new ServerSocket(port); while (true){ //從請求佇列中取出連結,如果只接受一次則不用使用while迴圈 Socket socket = serverSocket.accept(); //獲取客戶端資訊 BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); String clientContent = input.readLine(); //接下來可以對資訊進行操作,我這裡是直接列印了,你可以讀取或者做其他操作 System.out.println(clientContent); //初始化輸出流,回覆客戶端 PrintStream out = new PrintStream(socket.getOutputStream()); //獲取鍵盤輸出的內容 String s = new BufferedReader(new InputStreamReader(System.in)).readLine(); //將資訊傳送給客戶端 out.println("open"); //關閉 out.close(); input.close(); } } catch (IOException e) { log.error("伺服器異常:" + e); } } }
客戶端:
import org.apache.log4j.Logger;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.*;
private static Logger log = Logger.getLogger(SocketServerUtil.class); public static final Integer port = 9001; public static final String host = "127.0.0.1"; /** * 客戶端 傳送TCP協議請求 * @param str */ public static void connectServerTCP (String str) { Socket socket = null; try { socket = new Socket(host, port); //接受服務端傳送的資料 BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); //向服務端傳送資料 PrintStream out = new PrintStream(socket.getOutputStream()); System.out.println("ready send info to server!!"); out.println(str); System.out.println("send info to server: "+ str); //傳送後斷掉連線 out.close(); input.close(); } catch (Exception e) { log.error("客戶端連結異常"+ e); } finally { if (socket != null) { try { socket.close(); } catch (Exception e) { socket = null; log.error("關閉異常"+ e); } } } }
使用UDP協議的話,因我只寫了客戶端可以參考下,方法如下:
public static void connectUDP (String str) { byte[] buf = str.getBytes(); DatagramPacket packet = new DatagramPacket(buf, buf.length, new InetSocketAddress(host, port)); try { DatagramSocket socket = new DatagramSocket(port); socket.send(packet); System.out.println(str); socket.close(); } catch (SocketException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } }
相關推薦
Java 實現socket 與伺服器實現實時通訊
現在有一個需求,就是要去給一臺客戶端主動去傳送指令,或者推送訊息,就尋求朋友問了問告訴我說socket可以實現,所以就在網上找了些資料一遍學習,一遍測試,現在把我最後的成果記錄下來。 如果對於socket有概念上的不理解的話,可以去百度一下會有很
Linux C UDP Socket實現客戶與伺服器簡單通訊
在linux平臺下用c語言udp協議實現客戶與伺服器的簡單通訊與封裝的實現 一、伺服器端 1、新建CreateServer.c和CreateServer.h檔案,伺服器的建立程式碼在此實現,程式中封裝了建立TcpSocket和UdpSocket伺服器的方法,
select實現多個客戶機與伺服器之間的通訊
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include <sys/select.h> #incl
Java使用多執行緒實現Socket多客戶端的通訊
要想詳細瞭解socket,大家請自行百度,我這裡只簡單介紹。 在網路中,我們可以利用ip地址+協議+埠號唯一標示網路中的一個程序。而socket程式設計就是為了完成兩個唯一程序之間的通訊(一個是客戶端,一個是伺服器端),其中用到的協議是TCP/UDP協議,它們都屬於傳輸層的協議。 TCP是基於連
基於TCP協議實現Linux下客戶端與伺服器之間的通訊,實現多執行緒、多程序伺服器
TCP是TCP/IP協議族中一個比較重要的協議,這是一種可靠、建立連結、面向位元組流的傳輸,工作在傳輸層。和TCP相對的不可靠、無連結、面向資料報的協議UDP,瞭解UDP客戶端與伺服器之間通訊請戳UDP協議實現的伺服器與客戶端通訊 TCP協議建立連線 首
java 實現微控制器與PC串列埠通訊
Java 實現微控制器與PC串列埠通訊 在用Eclipse做開發時,我發現利用Eclipse控制檯可以很方便的實現PC與微控制器的串列埠通訊,這樣可以省略自己做一個GUI的步驟,直接利用Console做串列埠通訊終端。 實現程式碼如下: package com
JAVA使用Lock與Condition實現排它,同步通訊
package com.study; import java.util.concurrent.locks.Condition
JAVA RPC遠端呼叫伺服器實現使用者登入、註冊
先來百科掃盲 : 什麼是 RPC(反正我也剛看的) RPC(Remote Procedure Call)—遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之間攜帶資訊資料。在OSI
java excel 寫入與下載實現 (解決亂碼問題)
情況描述: Excel的預設編碼格式是 ANSI,但是 office 版本有很多 舊版本的excel無法開啟utf-8編碼的檔案,只能開啟ANSI編碼的檔案 (如office2007版本) 新版本的excel可以開啟utf-8編碼的檔案,也能開啟ANSI編碼的檔案 (如office2010版
RxJava(五) onErrorResumeNext操作符實現app與伺服器間token機制
RxJava系列文章目錄導讀: 一、需求場景: 在開發App的時候, 很多公司的提api介面, 請求的的時候都需要帶有token, 該token在使用者第一次啟動app或者登陸的時候去獲取. 以後的所有請求都需要帶該Token 如果token過期,
Messenger實現Activity與Service的雙向通訊
Activity與Service間的單向通訊,相信大家都知道,常用的有下面3種方式: 1. 通過bindService(service, conn, BIND_AUTO_CREATE)開啟Service,然後在ServiceConnection的onServi
JAVA集合 Deque 與 Queue 實現類 ArrayDeque(佇列、雙端佇列) 原始碼淺析
文章目錄 JAVA集合 Deque實現類 ArrayDeque(雙端佇列) 原始碼淺析 一、簡述: 二、ArrayDeque 類結構與屬性 三、ArrayDeque 構造方法 四、Queue 的方法 1.
nodejs之http、fs、querystring模組實現網頁與伺服器的互動
一.實現瀏覽器端請求之後,伺服器響應開啟相應的靜態網頁內容: 思路:直接通過瀏覽器端輸入的url值來判斷,從而顯示出該url對應的網頁的內容。直接在配置伺服器的js程式碼裡寫出靜態頁面的內容: //前端頁面和伺服器未分離 var http = requir
通過WebSocket和STOMP實現瀏覽器和伺服器的訊息通訊
非同步訊息非同步訊息有兩個重要的概念,訊息代理(broker)和目的地(destination)。訊息代理:當一個應用傳送訊息時,需要制定傳送的目的地,然後將訊息交給訊息代理(類似郵局),訊息代理會確保訊息傳送到指定的目的地。目的地:不同的訊息系統有不同的訊息路由模式,但是有
GSM模組_STM32實現GPRS與伺服器資料傳輸經驗總結
硬體環境 MCU:STM32F103RET6 (偵錯程式:J-Link) GSM模組:Ai-Thinker_A6 (安信可)(還需要配一個串列埠列印工具,當初選這個模組純粹是因為價格是最便宜的)
非同步Socket Tcp伺服器實現(C#)
/// <summary> /// 非同步SOCKET 伺服器 /// </summary> public class AsyncServer : IDisposable { #region Fields /// <
java 利用Socket 在伺服器端和客戶端進行通訊
伺服器端import java.io.*;import java.net.*;public class Server{ public static void main(String args[]){ ServerSocket server=null; S
ROS學習筆記 (四):使用ROS實現ARM與PC之間的通訊
這一篇文章在古月居的部落格上有介紹點選開啟連結,在此只是做一個簡單的總結方便自己以後查閱。 示例使用的是ROS wiki上面的helloword示例點選開啟連結。 在ROS中實現ARM與PC通訊的難點主要是架設ARM與PC之間的通路,這一塊wiki上面有介紹多機通訊。 首先
linux下rsync+inotify實現兩臺伺服器檔案實時同步
假設兩個伺服器: 192.168.0.1 源伺服器 有目錄 /opt/test/ 192.168.0.2 目標伺服器 有目錄 /opt/bak/test/ 實現的目的就是保持這兩個伺服器某個檔案目錄保持實時同步 實現方式: 通過rsync+inotify-too
Java呼叫阿里SMTP伺服器實現郵件傳送
// 構建授權資訊,用於進行SMTP進行身份驗證 Authenticator authenticator = new Authenticator() { @Override protected PasswordAuthentica