簡體   English   中英

用Java初始化DatagramSocket

[英]Initializing a DatagramSocket in Java

我將創建一個簡單的服務器來處理一些UDP數據報。 我的代碼如下:

public class UDPServer implements Runnable{

    private static final Logger logger = Logger.getLogger("UDPServer");
    private DatagramSocket datagramSocket = null;
    private int port;

    public UDPServer(int portNumber) {
        this.port = portNumber;
        try {
            this.datagramSocket = new DatagramSocket(port, InetAddress.getLocalHost());
        } catch (UnknownHostException ex) {
            logger.info("Server creating failed 1...");
        } catch (SocketException e) {
            logger.info("Server creating failed 2...");
        }
        logger.info("Server created...");
        logger.log(Level.INFO, "Datagram socket: INETAddress: {0} Port: {1}", new Object[]{datagramSocket.getInetAddress(), datagramSocket.getPort()});
    }

    private void runServer() {
        logger.info("Starting the server...");
        try {
            while (true) {
                byte[] buffer = new byte[64];
                DatagramPacket receivedPacket = new DatagramPacket(buffer, buffer.length);
                logger.log(Level.INFO, "Waiting for an incoming packet on {0}", this.datagramSocket.getInetAddress());
                datagramSocket.receive(receivedPacket);
                logger.log(Level.INFO, "Received packet from: {0}", receivedPacket.getSocketAddress());
                new DatagramConsumer(receivedPacket).start();
            }
        } catch (SocketException ex) {
            // logging...
        } catch (IOException ex) {
            // logging
        }
    }

    @Override
    public void run() {
        this.runServer();
    }
}

它只是創建一個服務器,並提供一種檢索和處理數據報的方法...當我創建服務器對象時,我不了解的是:

UDPServer server = null;
        try {
            server = new UDPServer(12395);
            Thread serverThread = new Thread(server);
            serverThread.start();
            serverThread.join();
        }

我看到這樣的輸出:

INFO: Server created...
INFO: Datagram socket: INETAddress: null Port: -1
INFO: Starting the server...
INFO: Waiting for an incoming packet on null

我剛接觸網絡,不知道自己在做什么錯...我期望我的服務器應該在定義的端口和本地地址上偵聽傳入的數據報...

使用datagramSocket.getLocalSocketAddress()代替顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM