簡體   English   中英

從套接字讀取Java掛起

[英]java reading from Socket hangs

我必須通過TCP / IP實現終端和POS終端之間的通信。 我所擁有的是pos終端的IP和端口以及協議規范。

在Java中,我做了一個簡單的示例來寫入套接字,但是當我想從套接字讀取消息時(直到達到超時),我的應用程序凍結了。

我做錯了什么?

 try {
        pos = new Socket("172.16.201.217", 1500);
        pos.setSoTimeout(5000);

        output = new DataOutputStream(pos.getOutputStream());

        System.out.println("is connected?:" + pos.isConnected());
        String amount = "100";
        String p = "000000123401100" + FS + amount + FS + FS + "+0" + FS + "705" + FS + FS + FS + FS + FS + FS + FS + ETX;

        //Podatki is a method which adds some additional chars + CRC.. 
        byte[] protokol = Podatki(p);

        //here I send a complete array of bytes to my pos...
        output.write(protokol, 0, protokol.length);
        output.flush();

        Thread.sleep(1000);


        input = new BufferedReader(new InputStreamReader(pos.getInputStream()));
        String line = "";
        String response = "";
        while ((line = input.readLine()) != null) {
            System.out.println(line);
            response = response + line + "\n";
            if (input.ready() == false) {
                break;
            }

我得到的是超時異常。我期望的是來自pos終端的響應,可以是ACK(確認)或NAK(負確認)。

謝謝。

您的消息可能未完成 (例如,它正在等待消息字符的特定結尾或字符序列),因此POS正在等待消息的其余部分。 在這種情況下,代碼上的超時將在pos錯誤消息之前出現。

要檢查它,請在代碼和POS之間使用套接字嗅探器,以便您可以看到客戶端和服務器之間到底傳遞了什么,反之亦然。

您似乎在讀行,但不在寫行。 readLine()將阻塞,直到流結束或遇到異常或行終止符。 如果您不發送線路終止器並且不關閉套接字並且沒有發生網絡錯誤,則對等方的readLine()將永遠阻塞。

發送行終止符: \\n\\r\\n

暫無
暫無

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

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