2016-04-01 2 views
1

ищет, чтобы создать прослушиватель tcp, который будет считывать информацию из соединения и отвечать некоторыми данными.чтение нескольких строк из потока 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 

Любой идеи, почему цикл for не распознает tmpLine! = null?

Я предполагаю, что могу уменьшить таймаут и сделать эту ошибку предупреждением, но это звучит не так!

Спасибо.

спасибо за обратную связь, равноправный использует этот код для отправки данных

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(); 

, но все еще получает ошибку :(поэтому я подозреваю, что я не закрываю соединение правильно ??

+0

Вам не нужно инициализировать переменную, которую вы назначаете в следующей строке. – EJP

ответ

2

peer не закрывает соединение, и ваш цикл чтения останавливается только тогда, когда он делает.

+0

спасибо за отзыв, эксперт использует это код для отправки данных ... –

+0

Jus как я уже сказал. Одноранговый узел не может закрыть сокет до тех пор, пока сервер не ответит, и сервер не сможет ответить до тех пор, пока партнер не закроет сокет, потому что он застрял в своем цикле чтения. Вам нужно выполнить свой ответ внутри цикла чтения. – EJP

+0

Или иначе выключение клиентского сокета для вывода после отправки запроса. – EJP

Смежные вопросы