[英]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.