2011-08-16 1 views
1

직렬 포트의 장치에 재설정 연결 명령을 보냅니다. 그리고 그에 대한 응답으로 가끔 (대부분의 경우) 한 문자 응답을 얻습니다. 그래서 나는 streamwriter를 사용하여 첫 번째 명령을 작성한 후 reader.Read를 사용합니다. 하지만 때로는 Google 기기가이 첫 번째 요청에 대한 응답을 보내지 않습니다. 내 소프트웨어에 응답을 사용하지 않아서 문제가되지 않습니다. 다음 번 명령을 기기로 보내겠습니다. 장치가 응답을 보내지 않으면 reader.Read 호출에 시간 초과 예외가 발생하고 장치와 통신 할 수 없습니다. 기기가 언제 요청에 응답할지 또는 내가 무엇을 할 수 있는지 알 수 없으므로 어떻게해야합니까? 나는 첫 번째 대답을 읽을 수 없다. 그러나이 경우 한 명의 캐릭터가 그 장치가 나를 보낼 다음 메시지를 훔칩니다. 그것은 메시지의 시작 부분에있을 것입니다. reader.read를 사용하면 타임 아웃 예외가 발생할 수 있습니다. 나는 시리얼 포트 장치에서 TimeReader (C#)가 발생하지 않도록 StreamReader의 다음 문자를 읽으려고 결정할 때

if (reader.Peek() >= 0) 
    reader.Read(); 

을 시도하지만 나에게 도움이되지 않았다. 그 시간 Peek() 메서드는 타임 아웃 예외를 가져올 수 있습니다. 나를 위해 문자가 있는지 또는 내가 건너 뛰고 다음 명령을 계속 작성해야하는지 어떻게 알 수 있습니까 ??

, 당신의 답변을 Ferda하기 Ozdemir 감사

답변

0

단지 예외를 catch하고 응답을위한 장치로 패킷을 전송하여 다시 한 번 반복 될 수 있습니다. 대부분의 장치 드라이버가하는 일입니다. 당신이하는 재시도 횟수를 제한 할 수 있습니다.

0

당신은 당신이 거기에 이런 식으로 뭔가를 시도 할 수 SerialPort.DataReceived 이벤트에 응답하는 방법이있는 경우 :

DataReceived 이벤트에

추가 정보는

while (port.BytesToRead > 0) 
{ 
    reader.Read(); //Or reader.ReadLine(); 
} 
: MSDN on DataReceived

+0

때때로 장치를하여 SerialPort에 연결되어 있지 않습니다 대신 그것은 ETH 모뎀 또는 gprs 모뎀을 통해 연결되어 있으므로 해당 조건에서 TCPclient를 사용하고 있습니다. BytesToRead와 같은 tcpclient 메소드가 없다는 것을 확인했습니다. 그러나 귀하의 제안은 직렬 포트 연결에 도움이 될 수 있습니다. 고맙습니다 –

관련 문제