簡體   English   中英

從Java發布數據並在node.js應用程序中接收

[英]Posting data from Java and receiving in node.js applicaiton

我用Java編寫了一個演示,該演示每秒發布一次數據:

public static void main(String[] arystrArgs) {
    //Get Operating System name and version     
    String strOSname = System.getProperty("os.name").toLowerCase();

    //Display application title and what it is running on       
    System.out.println("Java Data Posting Demo");
    System.out.println("Build date: " + BUILD_DATE + ", Version: " + VERSION_NO);
    System.out.println("Running on: " + strOSname.substring(0, 1).toUpperCase() 
                                      + strOSname.substring(1).toLowerCase());
    //Post data to server
    HttpURLConnection conn = null;

    while( true ) {
        try {
                Thread.sleep(DELAY_BETWEEN_POSTS);

                URL url = new URL("http://localhost:8080");
                conn = (HttpURLConnection)url.openConnection();

                if ( conn != null ) {
                    //Whatever you wants to post...                 
                    String strPostData = "p1=Hello&p2=" + (new Date()).getTime();

                    conn.setRequestMethod("POST");
                    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                    conn.setRequestProperty("Content-length", Integer.toString(strPostData.length()));
                    conn.setRequestProperty("Content-Language", "en-GB");
                    conn.setRequestProperty("charset", "utf-8");
                    conn.setUseCaches(false);
                    conn.setDoOutput(true);

                    DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
                    dos.writeBytes(strPostData);
                    dos.close();

                    System.out.println("Post to: " + url.toString() + ", data: " + strPostData);
                }
            } catch (InterruptedException|IOException ex) {
                    //ex.printStackTrace();                 
            } finally {
                if ( conn != null ) {
                    conn.disconnect();
                    conn = null;
            }                   
        }
    }
}

我已經編寫了一個偵聽端口8080的Node.js應用程序,但是在http處理程序中看不到任何POST請求,當我在相同的地址和端口上使用瀏覽器進行測試時,我只會看到GET請求。

來自node.js應用程序的代碼段:

function defaultHandler(request, response) {
    try{
           if ( request.method == "POST" ) {
               var strBody = "";
               request.on("data", function(chunk) {
                   strBody += chunk;
               });

               request.on("end", function() {
                   console.log("Received posted data: " + strBody);
               });
           } else {
                      console.dir(request);
                  }
      } catch( ex ) {
          console.dir(ex);
      }
};

var app = http.createServer(defaultHandler);
app.listen(8080);

這是精簡版,但我所看到的只是get請求。 我可以看到Java正在連接和發布數據,因為當我啟動Node.js時,只有當我啟動Node.js時,Java應用程序才連接到URL,然后在發布之間有第二個延遲地啟動POSTING,即終止節點,然后它停止發布並重新啟動節點,使發布恢復。

您的Node應用程序從不向客戶端發送響應。 您發送了很多請求,但是Java Client從未收到服務器的響應。 您應該在響應時執行end方法。

var http = require('http');

function defaultHandler(request, response) {
    try {
        if (request.method == "POST") {
            var strBody = "";
            request.on("data", function(chunk) {
                strBody += chunk;
            });
            request.on("end", function() {
                console.log("Received posted data: " + strBody);
            });
        } else {
            console.dir(request);
        }

        respone.end(); // for example here

    } catch (ex) {
        console.dir(ex);
    }
};

var app = http.createServer(defaultHandler);
app.listen(8080);

在這里您可以找到文檔-https://nodejs.org/api/http.html#http_class_http_serverresponse

我不是Java開發人員,但我認為您可以嘗試在連接上使用flush和getResponseCode方法。

conn.setDoOutput(true);

DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(strPostData);
dos.flush();
dos.close();

int responseCode = conn.getResponseCode();

固定,它是Java,我將Java代碼修改如下:

    URL url = new URL("http://localhost:8080");
    conn = (HttpURLConnection)url.openConnection();

    if ( conn != null ) {
    //Whatever you wants to post...                 
            String strPostData = "p1=Hello&p2=" + (new Date()).getTime();

            conn.setRequestMethod("POST");
            conn.setRequestProperty("User-Agent", USER_AGENT);
            conn.setRequestProperty("Accept-Language", "en-GB,en;q=0.5");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty("Content-length", Integer.toString(strPostData.length()));
            conn.setRequestProperty("Content-Language", "en-GB");
            conn.setRequestProperty("charset", "utf-8");
            conn.setUseCaches(false);
            conn.setDoOutput(true);

            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
            dos.writeBytes(strPostData);
            dos.flush();
            dos.close();

            int intResponse = conn.getResponseCode();
            System.out.println("\nSending 'POST' to " + url.toString() + 
                    ", data: " + strPostData + ", rc: " + intResponse);;
    }

暫無
暫無

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

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