2011-04-21 7 views
0

캡쳐 중에 TCP 포트 (# 123)로 데이터를 보내고 tcp와 함께 aC# 코드를 사용했기 때문에 신호 캡처 (vilistus)를 위해 가져온 장치에 문제가 있습니다. listener가 동일한 포트에서 데이터를 수신하지만 프로그램이 accepttcpclient() 명령 행에서 차단되고 데이터가 수신되지 않습니다.tcp 포트에서 데이터 수신

+0

기기에서 데이터를 전송하고 있습니까? Wireshark 또는 다른 네트워크 분석 도구를 사용하여 네트워크를 통해 어떤 일이 일어나는지보십시오. – Brandon

답변

0

클라이언트가 수신기에 연결하지 않은 것처럼 들립니다. TcpListener에서 AcceptTcpClient를 호출하면 응용 프로그램이 클라이언트가 연결하는 것을 기다리고 거기에서 멈추어 서 문제가되는 것 같습니다.

BeginAcceptTcpClient를 실행하여 응용 프로그램을 해제하고 클라이언트를 기다리는 동안 프로그램을 계속 실행할 수있게하여이 문제를 해결할 수 있습니다. 클라이언트가 다음 대리자가 호출됩니다 연결하고하면 다음 등의 데이터를 읽고, 클라이언트 처리를 시작할 수 있습니다 예를 들어 : 클라이언트는 다음 클라이언트에 액세스 할 수있는 자유를 갖게 될 것이다 올바르게 연결 제공

class Comms 
{ 
    TcpListener listener; 
    TcpClient client; 

    // Starts listening for a tcp client 
    public void StartListener() 
    { 
     listener = new TcpListener(IPAddress.Any, 123); 
     listener.BeginAcceptTcpClient(new AsyncCallback(ClientCallback), listener); 
    } 

    // Callback for when a client connects on the port 
    void ClientCallback(IAsyncResult result) 
    { 
     listener = (TcpListener)result.AsyncState; 
     try 
     { 
      client = listener.EndAcceptTcpClient(result); 
      // From here you can access the stream etc and read data 
     } 
     catch (IOException e) 
     { 
      // Handle any exceptions here 
     } 
    } 
} 

는 NetworkStream 및 그런 다음 데이터를 읽고 클라이언트에 씁니다. 당신이 볼 수있는 빠른 참조와 예제가 있습니다. http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.beginaccepttcpclient.aspx

데이터 읽기 및 쓰기와 관련하여 클라이언트의 NetworkStream 읽기 및 쓰기 기능과 비슷한 잠금 문제가 있습니다.

  1. 이는 NetworkStream의 ReadTimeout 및 WriteTimeout 속성을 설정하여, 기능을 읽기 위해 시간 제한을 설정하고 쓰기 :이 문제에 대한 두 가지 가능한 솔루션을 가지고있다.

  2. BeginAcceptTcpClient와 비슷한 콜백 메서드를 사용하려면 NetworkStream에있는 BeginRead 및 BeginWrite 함수를 사용하십시오.

는 개인적으로는 타임 아웃이 발생할 때까지 프로그램을 무료로하지 않습니다 처음으로 두 번째 옵션을 선호하지만 그들은 둘다 실행 가능한 옵션과 당신이 구현 원합니다 어느 따라 달라집니다. 당신은는 NetworkStream에 대한 자세한 내용은 여기를 갈 수 http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.aspx

희망이이 장치가 클라이언트되고 있다는 이상한 소리

0

을하는 데 도움이됩니다. 포트 123의 장치에 tcpClient.Connect()을 사용하면 안됩니까?

왜?

  1. 서버에서 실행중인 서버를 어떻게 알아야합니까? 영원히 연결하려고 할 수는 없습니다.
  2. PC에서 응용 프로그램에 포트 123이 사용 가능하다는 것을 장치가 어떻게 알 수 있습니까?
관련 문제