Android – How to make a imageView full the screen?

在layout檔的屬性中加入

<ImageView
        android:id="@+id/trialIntervalImage"
        android:layout_width="2000dp"
        android:layout_height="1500dp"
        android:scaleType="fitXY"  //這行
        android:src="@drawable/trialintervalimage"
/>

android:scaleType=”fitXY” 會讓原圖滿版到整個螢幕

 

參考:

1.农民伯伯 Android2.2 API 中文文档系列(6) —— ImageView:

http://www.cnblogs.com/over140/archive/2010/09/19/1830703.html

Android – 觸發後只執行一次、要有時間性且更改UI的方法(AsycTask)

原意想要實作出像是delay多少秒之後要做UI更新

找到的方法是用timer、handler去做

 

不過用timer來計時每隔一段時間 重複執行某件事

再由handler去控制畫面UI的更新

-> 這個方法比較適合用在”重複執行”

 

對於這次我想要做的是,被觸發後,只想要執行一次

而這一次的動作,需要延遲幾秒鐘,且延遲完想要做些動作來恢復前面的改變

 

e.g. 在每個Trial間,想要插入間隔2000ms的空檔,實作方式用一張黑色底圖片蓋住原有圖,時間到後再把這張圖片拿掉

建立一個class繼承AsyncTask,其中要帶入三種參數<params, XXX, results > => 中間參數那項我忘記是什麼了

doInBackground是另一個會在背景執行thread,此範例是特地讓他delay一段時間

onPostExecute是執行完doInBackground後,會執行的一段程式,通常會用來顯示thread執行後的結果

在此例中,我拿來恢復原本的改變

private class TrialIntervalUpdate extends AsyncTask<Integer, Void, Integer> {
        @Override
        protected Integer doInBackground(Integer... params) {
            Log.e("doInBackground", "sleep "+params[0]+"ms");
            SystemClock.sleep(params[0]);
            return params[0];
        }

        protected void onPostExecute(Integer param)
        {
            Log.e("After "+ param + "ms","put img to back");
            trialIntervalImage.setImageAlpha(0);
        }
    }

 

創完class後,在想要觸發的地方,寫下:

            // 跑出來蓋住
            trialIntervalImage.bringToFront();
            trialIntervalImage.setImageAlpha(255);
            Log.e("clicked", "bringToFront and setAlpha 255");
            new TrialIntervalUpdate().execute(trialInterval);

先讓圖片跑到最上層、顯示不透明度255(最不透明 vs. 最透明是0)

再執行新的thread來實作delay,傳入想要delay的時間(int trialInterval)

 

 

參考:

1. 渺小且微不足道的晦暗 Android timer / sleep / delay / 更新 UI 的方法:

http://pontiffkao.blogspot.tw/2011/04/android-timer-sleep-delay-ui.html

2.  GIVEMEPASS’S ANDROID惡補筆記 無痛執行緒

http://givemepass.blogspot.tw/2011/10/blog-post.html

3. 老灰鴨的筆記本 【Android】AsyncTask – Thread 外的另一選擇

http://oldgrayduck.blogspot.tw/2013/01/androidasynctask-thread.html

4. Givemepass’s Android 惡補筆記 如何使用Handler

http://givemepass-blog.logdown.com/posts/296606-how-to-use-a-handler

[Java] Bubble sort practice

 

class BubbleSort{
	
	private static int HOW_MANY_RANDOM_NUMBER = 200;
	private static int MAX_RANDOM_NUMBER = 1000;

	private static int swap(int n1, int n2){
		return n1;
	}

	private static void bubble(int data[]){
		int cursor=0, index=0;
		for(index=0; index<data.length; index++){
			for(cursor=0; cursor<data.length-index-1; cursor++){
				if(data[cursor] > data[cursor+1]){
					data[cursor+1]= swap(data[cursor], data[cursor]=data[cursor+1]);
				}
			}
		}
	}

	private static void printArray(int data[]){
		System.out.print("[data]: ");
		for(int x : data){
			System.out.print(x+ " ");
		}
		System.out.println();
	}

	private static int[] numberGenerator(int howmany, int howbig){
		int tmp[] = new int[howmany];
		for(int x=0; x<tmp.length; x++){
			tmp[x] = (int)(Math.random()*howbig+1);
		}
		return tmp;
	}

	public static void main(String args[]){
		System.out.println("現在要取"+HOW_MANY_RANDOM_NUMBER+"個 1~"
			+MAX_RANDOM_NUMBER+" 的亂數資料");
		// 取HOW_MANY_RANDOM_NUMBER個 1~MAX_RANDOM_NUMBER 的亂數存進去data陣列中
		int data[]= numberGenerator(HOW_MANY_RANDOM_NUMBER, MAX_RANDOM_NUMBER);
		// 顯示data內的排序
		printArray(data);
		System.out.println("資料經過Bubble Sort之後");
		// 把data用bubble排序過
		bubble(data);
		// 再顯示出來
		printArray(data);
	}
}

練習重點:

1. bubble sort的概念:

將一串數列由小到大排序,像在水中的泡泡一樣,小泡泡浮上去、大泡泡往後排

2. bubble sort的時間複雜度:

最佳時間:O(n)

平均時間:O(n^2)

最差時間:O(n^2)

空間複雜度:O(1) => 指所需要佔用的空間大小,O(1)表示佔用空間固定,不受數列大小影響

代表一串數列經過bubble sort之後,所花的時間,

最好的情況下就是一開始就排好了,不需要再排序,但還是要走過一輪把數列的每個都檢查過一次,所以跟數列的數量一樣(n)

最差的情況就是大小順序完全相反,每個都需要重新排一次,也就是把數列的每個元素(n)都檢查過n*n次

* 如何證明時間複雜度呢?

將數列數量逐漸增加,觀察所需排序時間:

Desktop_—_-bash_—_96×24

Desktop_—_-bash_—_96×24

Desktop_—_-bash_—_96×24

Desktop_—_-bash_—_96×24

3. java的random:

private static int[] numberGenerator(int howmany, int howbig){
		int tmp[] = new int[howmany];
		for(int x=0; x<tmp.length; x++){
			tmp[x] = (int)(Math.random()*howbig+1);
		}
		return tmp;
	}

4. java的swap:

private static int swap(int n1, int n2){
		return n1;
}

要把x和y交換
使用: data[cursor+1]= swap(data[cursor], data[cursor]=data[cursor+1]);
代數簡化版: y= swap(x,x=y);

 

參考:

1. 小殘的城市光廊:http://emn178.pixnet.net/blog/post/93779892-氣泡排序法(bubble-sort)

對於Java新手,要如何開發Android Bluetooth App?

  1. 要寫Java程式,包括Android,一定要先安裝JDK(Java Developement Kit)
    1) 中文教學:http://rx1226.pixnet.net/blog/post/284754793-%5Bandroid-studio%5D-1-1-修改sdk和jdk位置
    2
    ) 前提是先抓 Java SE Development Kit 8u101
    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  2. 再來要寫Android App的話,就是要裝Android的開發環境,就是Android studio,怎麼抓?
    google搜尋:android studio download/ install
    – 如果抓下來安裝完後,不會設定、不知道要做什麼
    google搜尋:android studio tutorial / android studio 教學
    範例:http://androidstation.pixnet.net/blog/post/261391402-android-studio入門教學一:安裝和設定
  3. 要注意一點,以前開發android app是用eclipse,近幾年才改成android studio,所以在google時,注意一下google到的開發環境是哪一個,有時候看起來很像
  4. 弄完android studio後,需要安裝sdk(Software developement kit)
    google搜尋:android studio sdk
    範例:http://www.codedata.com.tw/mobile/android-tutorial-the-1st-class-2-android-sdk
所有環境弄好後,也試著把別人的範例程式抓下來,卻不知道如何下手或改寫?
在此我建議可以先從基本元件開始熟悉,我的熟悉方式和流程大約是
  1. 先創一個File-> New project-> empty activity
    – 如果到這邊不知道怎麼做的話,google搜尋:android studio new project
  2. 創好後,瀏覽一下左邊的檔案列表
    MainActivity_java_-_GmailTest_-____Documents_AndroidProject_GmailTest_
    看一看裡面的檔案有哪些,Java資料夾內有MainActivity.java,其他不重要
    再來res資料夾(resource)內有drawable(放圖片的)、layout(App的畫面呈現)、這兩個資料夾最重要,其餘可以之後有用到在學即可
    所以在layout裡,可以看到activity_main.xml檔,他就是App的主畫面,點進去看可以看到
    activity_main_xml_-_GmailTest_-____Documents_AndroidProject_GmailTest_
    可以試著切換Text和Design兩種呈現方式,基本上一開始只需要用Design的模式去做就好,換過去Design後,可以看到你的app畫面出來了
  3. 燒進去手機實體看看
    google搜尋:android studio 燒入手機
    範例:http://chiachiku.pixnet.net/blog/post/60204745-30分鐘做出自己的android-app
    如果
    找不到手機裡的開發人員模式在哪裡
    google搜尋:你的手機品牌 型號 開發人員
    範例:zenfone selfie 開發人員
燒成功後,再來就是試著熟悉元件了,元件就是有Button(按鈕)、TextView(文字方塊)、ImageView(圖片方塊)、EditText(編輯文字方塊)等等,還有很多元件,
但我建議這四個先練習過一次,怎麼練習?
  1. google搜尋:android button 教學
    google搜尋:android textview 教學
    google搜尋:android imageview 教學
    google搜尋:android edittext 教學
  2. 同樣都是照著裡面的程式,先照著打,不要複製貼上
  3. 一樣燒進去手機跑跑看
  4. 以button為例,跑完後,好,開始看網站上的教學,看一下網站上是如何解釋button程式碼的,如果沒有解釋,那再google下一個button教學,多看三、四個教學後,會發現有些共通點,都是寫在MainActivity內的onCreate()裡
  5. 這時,google搜尋:android oncreate
  6. 可以查到android作業系統內是如何控制App的存亡
  7. 再來button程式碼內,也都可以看到onClick
    google搜尋:android button onclick
  8. 可以查到onclick是做什麼的,沒查到就再查別人的教學
  9. 以此類推,把Button, TextView, ImageView, EditText的基礎程式碼學完
再回去看你抓過的Android範例程式碼,會發現你已經看得懂部分程式碼的運作了
以這個google的技巧為基礎,慢慢找出範例程式碼內的運作方式
Android App難的地方在於除了程式語言之外,還有包含作業系統
所以稍微複雜一點的App會用到Thread的概念
google搜尋:Android thread 教學

舉個例子:
可以看到有三個thread:
  1. AcceptThread
  2. ConnectThread
  3. ConnectedThread
都是跟藍芽連接有關的thread,網頁裡介紹的很詳細,可以先試著把程式碼燒進去兩隻手機裡,試跑看看能不能動
能動就來看看我們想改什麼?
假如想要改變成 藍牙圖片分享器
那麼可以想像,
應該要把原本藍牙聊天室的textview和edittext 改成 imageview和選取圖片的button
這時,就可以google: android button 選圖片

Sending different data types and different ways to graylog server(part. 2)

 

5. 使用Graylog Collector sidecar收集 graylog server上的 log file資料 至 graylog GELF UDP input

Collector sidecar主要架構圖:

Graylog_Collector_Sidecar_—_Graylog_2_0_0_documentation

跟著http://docs.graylog.org/en/2.0/pages/collector_sidecar.html走 (windows 和 linux都有)

1) 安裝nxlog => 記得安裝完nxlog後,要先把nxlog service停下來,再改由graylog去控制nxlog

2) 安裝collector sidecar

3) 設定!!!(最麻煩的部分)

A. collector_sidecar.yml:

server_url: http://140.116.221.54:12900
node_id: graylog-collector-sidecar
collector_id: file:/etc/graylog/collector-sidecar/collector-id
tags:
    - linux
    - graylog
    - server
log_path: /var/log/graylog/collector-sidecar
update_interval: 10
log_rotation_time: 10
log_max_age: 10
backends:
    - name: nxlog
      enabled: true
      binary_path: /usr/bin/nxlog
      configuration_path: /etc/graylog/collector-sidecar/generated/nxlog.conf

– server_url要對到graylog server的port 12900,在System-> node-> REST API可看到該設多少

– node_id可隨意取,之後在graylog web抓到會顯示你這邊設定的node_id

– collector_id這個在安裝的時候,就會順便給,不需要動(除非安裝graylog collector的路徑有變更)

– tags 在graylog web會找你本地端這邊設定的tags 去對應到 web端設定的configurations的tags

– backends這邊我只試過nxlog來蒐集,在蒐集windows的log時,如果yml設定檔內有其他backend,就先都砍掉,只留nxlog

 

B. 上面設定完後,連接到graylog web介面-> System-> Collectors -> Manage configurations-> Create configuration->隨意取

– tag就填入剛剛在yml檔內設定的tags

– Configure Collector Outputs: 這邊所設定的Output,指的是 資料被蒐集的本地端所安裝的collector 要output到哪裡
當然是要output到graylog server的input囉,所以這邊設定完的output,別忘記也要到graylog web-> System-> Inputs去新增一個對應的input

– Configure Collector Inputs:
type有四種:
1| [NXLog] file input: 指的是 想被蒐集資料有安裝collector sidecar本地端的file
2| [NXLog] Windows Event log: Windows下的event log
3| [NXLog] UDP Syslog Listener: 還不是很懂QQ
4| [NXLog] TCP Syslog Listener: 還不是很懂QQ

Input的Forward to就是到上面所設定的Collector Outputs,也就是forward到graylog的input裡,
在collector這邊所設定的都會即時更新到 有安裝collector sidecar那端上,可以把web介面的collector設定想像成在本地端做設定的感覺,會比較好懂collector input和output

– Define Snippets

1| Backend目前好像只能選擇NXLog (?
2| Snippet就是寫上附加的資訊(外掛之類的訊息),會即時更新到 有安裝collector sidecar那端上
所以可以試試看在snippet加上 #hello 的字眼,然後到 有安裝collector sidecar那端上 查看collector_sidecar.yml檔有沒有被更改

 

設定完,”理論上”就會有資料上傳到graylog的input裡了

 

 

疑點解決:

如果設定完後,還是沒有資料進來怎麼辦?

1. 先檢查collector是否有成功安裝、連線:
Graylog_Web_Interface
這邊有出現,並且對應到正確的OS、collector id(可在collector-sidecar/collector-id內查看),就是有成功連線

在web collector頁面,按show message後沒有資料,就是configuration有出問題

 

2. 檢查兩端(web、有安裝sidecar那端)configuration的tags是否有相同對應:

兩端的tags一定要相同,有安裝sidecar那端的collector才抓得到configuration哦,
否則只是一個空的collector而沒有設定input和output,自然就不會有資料流動囉

*再真的沒有資料的話,可試試看把tags換掉

 

3. 檢查collector output是否有對應到graylog input的ip和port(重要)

graylog input的bind_address 和 collector output的server ip是要一樣的哦!!
port也要開同一個port,例如12210

 

4. 以上幾點都檢查完後,要檢查collector input是否有讀到,有一個最簡單的方法
在collecotor input設定一個[NXLog] file input,
path to logfile就設定隨便一個空的文件檔(e.g. hello.txt,自己創在桌面之類的)
設定完後,試著修改hello.txt,改完存檔後,再到collector按show message看是否有修改資料上傳

 

這邊有測試到一個情況是一個軟體把logfile都lock住,導致input讀不到,目前無解…

比較爛的方式就是複製出一份沒lock的,再上傳

對了! 在collector input的path to logfile的檔名可以設定用 XXX/*.log,就可以把XXX資料夾裡面的所有副檔名為log的都抓進去

colorful ‘ls’ command in mac terminal

看到Ubuntu的command line上的 ls 都很繽紛

很容易就可以看出資料夾與檔案的差別

就不用看得眼花撩亂

於是google一下發現有一篇超棒!

裡面還有一個網站是可以手選顏色在自動產生指令去修改顏色

先到 ~

ls -al

找到.bash_profile檔

vim /.bash_profile

在最下面加入

export CLICOLOR='true'

export LSCOLORS="gxfxcxdxcxegedabagacad"

畫面就票釀囉

 

分享一下現在我的bash_profile:

RongSonHo_—_vim____bash_profile_—_80×24

參考:

  1. mac 讓終端機ls有顏色: http://sodahau.logdown.com/posts/18879-mac-ls

How to set up graylog server on Ubuntu 14.04?

 

1. OpenSource 資料蒐集&分析平台比較:

https://www.evernote.com/l/AfBaqPuTRHBINLW7Fcafv2jffYx4WnTqau8

 

2. graylog簡介:
https://www.graylog.org/overview

 

3. 從零到架設

1) Java SE 8:
http://rongson.twbbs.org/wordpress/how-to-install-java-se-8-in-ubuntu-14-04/

2) MongoDB:
sudo apt-get update

sudo apt-get install mongod

* 檢查是否有執行: ps aux | grep mongod

3) ElasticSearch:
Ubuntu_installation_—_Graylog_2_0_0_documentation

* 檢查是否有執行: ps aux | grep elasticsearch

若沒有,就重開機:sudo reboot

4) Graylog:

檢查完前兩項mongodb, elasticsearch都有設定好且啟動後,再進行graylog安裝

Ubuntu_installation_—_Graylog_2_0_0_documentation

設定password_secret:`pwgen -N 1 -s 96` => 產生的亂碼複製到/etc/graylog/server/server.conf內的password_secret欄位

和root_password_sha2:echo -n yourpassword | shasum -a 256 =>  產生的亂碼複製到/etc/graylog/server/server.conf內的root_password_sha2欄位

 

*成功後,如何開啟graylog服務?

=> `sudo rm -f /etc/init/graylog-server.override`

=> `sudo start graylog-server`

*確認graylog server有否開啟服務?

=> ps aux | grep graylog

若沒有開啟,就是Java版本有問題,請更新到java se 8

Desktop_—_sinpao_graylog-server___etc_graylog_server_—_ssh_sinpao_140_116_221_54_-p_22_—_113×36

不能openjdk哦!

 

5) 設定graylog web interface:

看:http://docs.graylog.org/en/2.0/pages/configuration/web_interface.html#configuring-webif-nginx

一樣到/etc/graylog/server/server.conf裡修改參數即可(跟剛剛設定密碼一樣檔案)


1. web_enable =true

2. rest_listen_uri = http://YourServerIp:12900/  (不是127.0.0.1:12900)

3. web_listen_uri = http://YourServerIp:9000/   (不是127.0.0.1:9000)

4. web_enable_cors = false

5. web_enable_gzip = true

 

=> 設定完,即可用瀏覽器輸入 YourServerIp:9000 就進去囉

預設帳密是admin / admin

參考:

1. graylog doc – OS packages: http://docs.graylog.org/en/2.0/pages/installation/operating_system_packages.html

2. graylog doc – Ubuntu steps by steps: http://docs.graylog.org/en/2.0/pages/installation/os/ubuntu.html

 

Sending different data types and different ways to graylog server(part. 1)

1. 在terminal以curl指令傳送json格式單次封包 至GELP HTTP input

=> (port 設為 12202)

ex. curl -XPOST http://140.116.163.151:12202/gelf -d ‘{“short_message”:”trytryRS”}’

ex. curl -XPOST http://140.116.163.151:12202/gelf -d ‘{“short_message”:”trytryRS”, “host”:”rongson”, “facility”:”rongsons mac”, “_test”:”hello”}’

1Graylog_Web_Interface

 

2. 以tcp client傳送單次plaintext封包

=> (port 12203)

import java.io.*;
import java.net.*;

class TcpClient
{
    public static void main(String argv[]) throws Exception
    {
          String sentence;
          String modifiedSentence;
          BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
          Socket clientSocket = new Socket("140.116.163.151", 12203);
          DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
          BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
          System.out.print("Input: ");
          sentence = inFromUser.readLine();
          outToServer.writeBytes(sentence + '\n');
          System.out.println("OVER");
          //modifiedSentence = inFromServer.readLine();
          //System.out.println("FROM SERVER: " + modifiedSentence);
          clientSocket.close();
    }
}

tcp

Graylog_Web_Interface

 

3. udp client傳送單次plaintext封包

=> (port 12204)

import java.io.*;
import java.net.*;
 
// 1. 本程式必須與 UdpServer.java 程式搭配執行,先執行 UdpServer 再執行本程式。
// 2. 本程式必須有一個參數,指定伺服器的 IP。
// 用法範例: java UdpClient 127.0.0.1
 
public class udpClient extends Thread {
    int port;            // port : 連接埠
    InetAddress server; // InetAddress 是 IP, 此處的 server 指的是伺服器 IP
    String msg;            // 欲傳送的訊息,每個 UdpClient 只能傳送一個訊息。
 
    public static void main(String args[]) throws Exception {
        for (int i=0; i<100; i++) {
            // 建立 UdpClient,設定傳送對象與傳送訊息。
            udpClient client = new udpClient(args[0], 12204, "UdpClient : "+i+"th message");
            client.run(); // 啟動 UdpClient 開始傳送。
        }
    }
 
    public udpClient(String pServer, int pPort, String pMsg) throws Exception {
        port = pPort;                             // 設定連接埠
        server = InetAddress.getByName(pServer); // 將伺服器網址轉換為 IP。
        msg = pMsg;                                 // 設定傳送訊息。
    }
    public void run() {
      try {
        byte buffer[] = msg.getBytes();                 // 將訊息字串 msg 轉換為位元串。
        // 封裝該位元串成為封包 DatagramPacket,同時指定傳送對象。
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length, server, port); 
        DatagramSocket socket = new DatagramSocket();    // 建立傳送的 UDP Socket。
        socket.send(packet);                             // 傳送
        socket.close();                                 // 關閉 UDP socket.
      } catch (Exception e) { e.printStackTrace(); }    // 若有錯誤產生,列印函數呼叫堆疊。
    }
}

Graylog_Web_Interface

 

4. 以Java TCPClient 寫入Json格式 傳送到 graylog GELF TCP input

import java.io.*;
import java.net.*;
import org.json.*;

class TcpClientJson
{
    private String host;
    private int port;
    private Socket socket;
    private final String DEFAULT_HOST = "localhost";


    public void connect(String host, int port) throws IOException {
        this.host = host;
        this.port = port;
        socket = new Socket(host, port);
        System.out.println("Client has been connected..");
    }

    public JSONObject receiveJSON() throws IOException {
        InputStream in = socket.getInputStream();
        ObjectInputStream i = new ObjectInputStream(in);
        JSONObject line = null;
        try {
            line = (JSONObject) i.readObject();

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
             e.printStackTrace();

        }
        return line;
    }
    public void sendJSON() throws IOException {
        JSONObject jsonObject2 = new JSONObject();
        jsonObject2.put("RS", "Hello Java Json");
        jsonObject2.put("host", "RS");
        jsonObject2.put("facility", "test");
        jsonObject2.put("_foo","bar");
        jsonObject2.put("short_message","hello");

        OutputStream out = socket.getOutputStream();
        DataOutputStream o = new DataOutputStream(out);        
        System.out.println("Hello sendJson");

        o.writeBytes(jsonObject2.toString()+'\0');
        System.out.println(jsonObject2.toString());

        out.flush();
        //System.out.println("Sent to server: " + " " + jsonObject2.get("key").toString());
    }

    public static void main(String argv[]) throws Exception
    {
      TcpClientJson client = new TcpClientJson();
        try{

            client.connect("140.116.221.54", 12299);
            // For JSON call sendJSON(JSON json) & receiveJSON();

            client.sendJSON();
            //client.receiveJSON();
        }
        catch (ConnectException e) {
            System.err.println(client.host + " connect refused");
            return;
        }

        catch(UnknownHostException e){
            System.err.println(client.host + " Unknown host");
            client.host = client.DEFAULT_HOST;
            return;
        }

        catch (NoRouteToHostException e) {
            System.err.println(client.host + " Unreachable");
            return;

        }

        catch (IllegalArgumentException e){
            System.err.println(client.host + " wrong port");
            return;
        }

        catch(IOException e){
            System.err.println(client.host + ' ' + e.getMessage());
            System.err.println(e);
        }
        finally {
            try {
                client.socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static String getUserString(){
        BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
        System.out.print("Input: ");
        String sentence="hello";
        try{
            sentence = inFromUser.readLine();
        }catch(IOException e){
            System.out.println(e);
        }
        return sentence;
    }
}

Graylog_Web_Interface

* 記得在java tcpclient端傳送前,要在結尾加入+’\0’,否則graylog gelf tcp input會收到流量,但不會顯示資料

參考:https://github.com/Graylog2/graylog2-server/issues/643

 

 

還有part.2
http://rongson.twbbs.org/wordpress/sending-differen…g-server(part-2)/