2017-02-18 17 views
1

우선, 잘못된 용어 사용에 대해 사과드립니다.UDPClient로 특정 포트 수신 및 전송 된 패킷 가져 오기

로컬 네트워크에 센서가 있습니다. 현재 온도 값을 포트 35333의 네트워크에있는 모든 사용자에게 브로드 캐스트합니다.이 센서에서 지속적으로 패킷을받는 C# 콘솔 프로그램을 만들고 싶습니다.

이 내 현재 코드입니다 :하지만 여기, 위의

public static UdpClient Client = new UdpClient(35333); 

private static async void Start() 
{ 
     Client.BeginReceive(new AsyncCallback(recv), null); 
} 

private static void recv(IAsyncResult res) 
{ 
     IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); 
     byte[] received = Client.EndReceive(res, ref RemoteIpEndPoint); 

     //Process codes 

     Client.BeginReceive(new AsyncCallback(recv), null); 
} 

코드가 작동하는 문제이다 : 나는 같은 바이트 배열을 항상 받아 계속.

... 
    [114][51][57][48][48][77][72][112] 

    [114][51][57][48][48][77][72][112] 

    [114][51][57][48][48][77][72][112] 

    [114][51][57][48][48][77][72][112] 

    [114][51][57][48][48][77][72][112] 
... 

는 지금까지 내가 아는 한, 다시, 그것은 나에게 ''진짜 ''데이터를 전송하기 시작, 그래서 어떻게 든,이 센서에 다시 승인을 보내야합니다, 불쌍한 내 네트워킹 지식을 변명.

모든 팁이나 제안을 환영합니다!

+0

UDP는 sessionless 방송입니다. 이 단일 장치의 UDP 패킷을 여러 수신자에게 전달할 가능성이 있으므로 ACK는 거의 발생하지 않습니다. 장치 프로토콜 문서를 검토하고 사용 가능한 예제 코드가 있는지 확인해야합니다. – JamieMeyer

답변

1

여기에는 최소한 두 가지 가능성이 있습니다.

먼저 이것은 온도 일 수 있으며 변화가 없습니다. 이 경우 센서의 사양에 따라 바이트를 구문 분석해야합니다.

두 번째로 이것이 실제로 확인 응답을 필요로하는 패킷 인 경우 센서가 수신하는 포트 (사양에서)와 확인 패킷이 어떤 모양인지 (사양에서 확인해야 함) 및 그 항구로 보내라.

여기서 핵심은 센서와 함께 제공된 문서를 검토하는 것입니다. 새로운 코드는 recv 방법 안에 앉아서 다음과 유사하게 나타납니다 :

private static void recv(IAsyncResult res) 
{ 
    IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); 
    byte[] received = Client.EndReceive(res, ref RemoteIpEndPoint); 

    //Pseudo code 
    //start_packet is the packet of bytes above from the sensor 
    If (received == start_packet) 
    { 
     //send acknowledgement 
    } 

    //Process codes 
    Client.BeginReceive(new AsyncCallback(recv), null); 
}