簡體   English   中英

從TCP流中讀取多行

[英]reading multiple lines from TCP stream

希望構建一個TCP偵聽器,該偵聽器將從連接中讀取信息並以一些數據進行響應。

我已經在單行輸入上運行了該程序,但是當我發送多行時它不起作用。

這是我正在使用的代碼

try {
    Socket clientConnection = null;
    clientConnection = serverSocket.accept();
    clientConnection.setSoTimeout(5 * 1000);
    String tmpLine=null;
    BufferedReader inFromClient = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    for (tmpLine = inFromClient.readLine(); tmpLine != null; tmpLine = inFromClient.readLine()) {
        searchLine += tmpLine;
        logMsg = "DBUG : T" + threadName + " readline : " + searchLine;
        stubLog.addMessage(logMsg, coreProperties.getLogger(),"DEBUG");
    }
} catch (Exception e) {
    logMsg = "ERRR : T" + threadName + " : tcpStubWorker: error in getting data : " + e.getMessage();
    stubLog.addMessage(logMsg, coreProperties.getLogger(),"ERROR");
    e.printStackTrace(); 
}

當我從線束發送此消息時:

String logonMsg = "msg: 0800    P3A^SNAT2 >>> S3A^SNAT204        15/10/12 16:55:07.00 rec: 001021\n"
+ "bit 007: 1012165507  \n"
+ "bit 011: 498432  \n"
+ "bit 033: (11)59501100554  \n"
+ "bit 070: 001  \n"
+ "bit 100: (11)59503646554  \n";

我在日志中得到這個:

DEBUG com.stubby.tcp.tcpStub  - 14:33:43:494 - DBUG : T00000026 readline : nullmsg: 0800    P3A^SNAT2 >>> S3A^SNAT204        15/10/12 16:55:07.00 rec: 001021
DEBUG com.stubby.tcp.tcpStub  - 14:33:43:509 - DBUG : T00000026 readline : nullmsg: 0800    P3A^SNAT2 >>> S3A^SNAT204        15/10/12 16:55:07.00 rec: 001021bit 007: 1012165507  
DEBUG com.stubby.tcp.tcpStub  - 14:33:43:510 - DBUG : T00000026 readline : nullmsg: 0800    P3A^SNAT2 >>> S3A^SNAT204        15/10/12 16:55:07.00 rec: 001021bit 007: 1012165507  bit 011: 498432  
DEBUG com.stubby.tcp.tcpStub  - 14:33:43:534 - DBUG : T00000026 readline : nullmsg: 0800    P3A^SNAT2 >>> S3A^SNAT204        15/10/12 16:55:07.00 rec: 001021bit 007: 1012165507  bit 011: 498432  bit 033: (11)59501100554  
DEBUG com.stubby.tcp.tcpStub  - 14:33:43:552 - DBUG : T00000026 readline : nullmsg: 0800    P3A^SNAT2 >>> S3A^SNAT204        15/10/12 16:55:07.00 rec: 001021bit 007: 1012165507  bit 011: 498432  bit 033: (11)59501100554  bit 070: 001  
DEBUG com.stubby.tcp.tcpStub  - 14:33:43:603 - DBUG : T00000026 readline : nullmsg: 0800    P3A^SNAT2 >>> S3A^SNAT204        15/10/12 16:55:07.00 rec: 001021bit 007: 1012165507  bit 011: 498432  bit 033: (11)59501100554  bit 070: 001  bit 100: (11)59503646554   
ERROR com.stubby.tcp.tcpStub  - 14:33:48:627 - ERRR : T00000026 : tcpStubWorker: error in getting data : Read timed out

為什么在tmpLine!= null上無法識別for循環?

我想我可以減少超時並將該錯誤警告,但這聽起來不太正確!

謝謝。

感謝您的反饋,對等方正在使用此代碼發送數據

Socket clientSocket = new Socket("10.52.88.102", 8888);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
outToServer.writeBytes(logonMsg + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println("From server: \"" + modifiedSentence +"\"");
clientSocket.close();

但仍然出現錯誤:(所以我懷疑我沒有正確關閉連接??

對方沒有關閉連接,並且您的讀取循環只會在對方斷開時停止。

暫無
暫無

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

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