模擬Syslog客戶端UDP發送日誌

上一篇,我初步整理了Syslog服務端接收日誌的例子,本篇主要是對客戶端模擬操做的一個基本例子。java

package com.tony.util;
import java.io.*;    
import java.net.*;    
    
/**
 * UDP客戶端程序,用於對服務端發送數據,並接收服務端的迴應信息.   
 * Title: SyslogClient
 * Description: none
 * Copyright @ 2012~2015 HP<br>
 * @author Tony
 * @createDate 2015年8月18日
 * @version v1.0
 */
public class SyslogClient {    
    private byte[] buffer = new byte[1024];    
    
    private DatagramSocket ds = null;    
    
    /**  
     * 構造函數,建立UDP客戶端  
     * @throws Exception  
     */    
    public SyslogClient() throws Exception {    
        ds = new DatagramSocket();    
    }    
        
    /**  
     * 設置超時時間,該方法必須在bind方法以後使用.  
     * @param timeout 超時時間  
     * @throws Exception  
     */    
    public final void setSoTimeout(final int timeout) throws Exception {    
        ds.setSoTimeout(timeout);    
    }    
    
    /**  
     * 得到超時時間.  
     * @return 返回超時時間  
     * @throws Exception  
     */    
    public final int getSoTimeout() throws Exception {    
        return ds.getSoTimeout();    
    }    
    
    public final DatagramSocket getSocket() {    
        return ds;    
    }    
 
    /**  
     * 接收從指定的服務端發回的數據.  
     * @param lhost 服務端主機  
     * @param lport 服務端端口  
     * @return 返回從指定的服務端發回的數據.  
     * @throws Exception  
     */    
    public final String receive(final String lhost, final int lport)    
            throws Exception {    
        DatagramPacket dp = new DatagramPacket(buffer, buffer.length);    
        ds.receive(dp);    
        String info = new String(dp.getData(), 0, dp.getLength());    
        return info;    
    }    
    
    /**  
     * 關閉udp鏈接.  
     */    
    public final void close() {    
        try {    
            ds.close();    
        } catch (Exception ex) {    
            ex.printStackTrace();    
        }    
    }   
    
    /**  
     * 向指定的服務端發送數據信息.  
     * @param host 服務器主機地址  
     * @param port 服務端端口  
     * @param bytes 發送的數據信息  
     * @return 返回構造後俄數據報  
     * @throws IOException  
     */    
    public final DatagramPacket send(final String host, final int port,    
            final byte[] bytes) throws IOException {    
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress    
                .getByName(host), port);    
        ds.send(dp);    
        return dp;    
    }
    
    /**  
     * 測試客戶端發包和接收回應信息的方法.  
     * @param args  
     * @throws Exception  
     */    
    public static void main(String[] args) throws Exception {    
        SyslogClient client = new SyslogClient();   
        //這裏咱們在本機測試,使用本機IP便可
        String serverHost = "127.0.0.1";    
        int serverPort = 514;    
        client.send(serverHost, serverPort, ("什麼均可以的接收參數").getBytes());   
        String info = client.receive(serverHost, serverPort);    
        System.out.println("服務端迴應數據:" + info);
    }    
}
相關文章
相關標籤/搜索