1. 程式人生 > >Java 實現socket 與伺服器實現實時通訊

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使用LockCondition實現排它,同步通訊

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實現ActivityService的雙向通訊

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實現ARMPC之間的通訊

這一篇文章在古月居的部落格上有介紹點選開啟連結,在此只是做一個簡單的總結方便自己以後查閱。 示例使用的是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