Xamarin Forms Artnet 및 UDP 전송

안드레이

Artnet 및 UDP 프로토콜을 사용하여 네트워크의 장치와 통신하는 크로스 플랫폼 응용 프로그램을 만들고 있습니다. Artnet도 UDP라는 것을 알고 있습니다.


작동하는 곳 :

  1. Windows OS :
  • 이더넷. 직접 링크 및 라우터 제어.
  • 와이파이. 직접 링크 및 라우터 제어.
  1. 안드로이드 OS :
  • 이더넷. N / A
  • 와이파이. 직접 링크 만.
  1. iOS :
  • 이더넷. N / A
  • 와이파이. 직접 링크 만.

Android 및 iOS에 라우터가있을 때 통신이 0 인 이유를 이해하지 못합니다. 온라인에서 찾을 수있는 모든 제안 코드를 시도하고 Android 및 iOS에서 찾을 수있는 모든 기능을 선택했습니다. Wireshark는 전송이 진행 중임을 보여 주지만 내 앱이 패킷을 캡처하지 않습니다.

스 니펫 :

var artnet = new ArtNetSocket(); // using System.Net.Sockets;
artnet.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
artnet.Bind(new IPEndPoint(LocalIP, 6454));
artnet.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

EndPoint localPort = new IPEndPoint(IPAddress.Any, Port);
ArtNetData data= new ArtNetData();
artnet.BeginReceiveFrom(recieveState.buffer, 0, recieveState.bufferSize, SocketFlags.None, ref localPort, new AsyncCallback(WhenRecieved), data);


private void WhenRecieved(IAsyncResult state)
{
            //1.Do something when received
            //2.Begin receive again

}

IP를 찾는 방법 :

            NetworkInterface[] Interfaces = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface Interface in Interfaces)
            {
                if (Interface.NetworkInterfaceType != NetworkInterfaceType.Loopback )
                {

                    UnicastIPAddressInformationCollection UnicastIPInfoCol = Interface.GetIPProperties().UnicastAddresses;
                    foreach (var info in UnicastIPInfoCol)
                    {
                        if (info.Address.AddressFamily == AddressFamily.InterNetwork)
                        {
                            IPsets.Add(new IPCouples(info.Address, info.IPv4Mask));
                            
                        }
                    }
                }
            }

너무 이상해서 아마 간단한 것 같아 ...

안드레이

좋습니다. 각 IP 그룹에 대한 소켓을 만들었 기 때문에 APP가 Microsoft OS 장치에 있지 않는 한 공용 네트워크에서 패킷이 캡처되지 않았습니다. UDPClient를 만들고 localIP 주소 대신 포트에 바인딩하면 보낸 사람의 IP 주소에 관계없이 해당 포트에서 들어오는 모든 것을 캡처합니다. 소켓의 IP 주소를 확인하면 0.0.0.0:PortNumber가됩니다.

    public class Something: UdpClient
    {
       public int LocalPort;
       public Something(int LocalPort) : base(LocalPort)
        {

            EnableBroadcast = true;
            this.LocalPort = LocalPort;
            StartListening();
        }

        private void StartListening()
        {
            //IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
            
            try
            {

                StateObject state = new StateObject();
                state.workSocket = Client;
                BeginReceive(received, state);
                
            }
            catch (SocketException e)
            {
                Console.WriteLine(e);
            }
        }

        private void received(IAsyncResult ar)
        {
            
            IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
            StateObject state = (StateObject)ar.AsyncState;

            var message = EndReceive(ar, ref remoteEndPoint);

            if (message.Length > 0)
            { 
                var messageString = (Encoding.UTF8.GetString(message));
                    
                //Do Something
            }
            StartListening();



        }

        public SendToAll(string message)
        {
         var callMessage = Encoding.ASCII.GetBytes(message);
                        UnicastIPAddressInformationCollection UnicastIPInfoCol = Interface.GetIPProperties().UnicastAddresses;
                        foreach (UnicastIPAddressInformation UnicatIPInfo in UnicastIPInfoCol)
                        {
                            if (UnicatIPInfo.Address.AddressFamily == AddressFamily.InterNetwork)
                            {

                                EnableBroadcast = true;
                                Send(callMessage, callMessage.Length, new IPEndPoint(GetBroadcast(UnicatIPInfo.Address,UnicatIPInfo.IPv4Mask) , LocalPort));

                            }
                        }
      }

      private IPAddress GetBroadcast(IPAddress someAddress, IPAddress someMask)
      {                

           //Do something to get broadscat
           return Broadcast;
      }


}
    public class StateObject
    { 
        public Socket workSocket = null;
        public const int BufferSize = 256;
        public byte[] buffer = new byte[BufferSize];
        public StringBuilder sb = new StringBuilder();
    }

모든 플랫폼에서 작동합니다. 사용하는 포트를주의하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Xamarin.Forms NavigationPage 및 화면 회전

분류에서Dev

Xamarin.Android에서 Xamarin.Forms로 프로젝트 전송

분류에서Dev

UDP 송신 및 수신

분류에서Dev

Xamarin.Forms Android 로컬 알림이 전송되지 않음

분류에서Dev

Xamarin Forms Maps Google 전용?

분류에서Dev

단추의 Xamarin.Forms.CarouselView 다음 및 이전 항목 이벤트

분류에서Dev

Xamarin.Forms, XAML 및 XMLNS 문제

분류에서Dev

Prism Viewmodels WPF 및 Xamarin Forms 공유

분류에서Dev

Xamarin.Forms 태블릿 및 휴대폰

분류에서Dev

Xamarin Forms 및 Prism, NavigationPage 호출시 오류

분류에서Dev

Linux-UDP 패킷을 복제, 전송 및 중복 제거 할 수 있습니까?

분류에서Dev

Xamarin 라이선스 및 Xamarin.Forms 선택

분류에서Dev

Android 및 클래식 Windows 용 Xamarin 또는 Xamarin.Forms?

분류에서Dev

Xamarin Forms AppCenter가 클래스에 전송 된 인식 할 수없는 선택기와 충돌합니다.

분류에서Dev

UDP 포트 전달 및 발신 포트

분류에서Dev

Xamarin.Forms Android 앱의 버전 및 설정을 처리하는 방법이 올바른가요?

분류에서Dev

Xamarin.Android 및 Xamarin.IOS에서 Xamarin.Forms를 사용하는 방법

분류에서Dev

부분적 udp 파일 전송

분류에서Dev

FreeRTOS + LWIP -UDP 데이터 전송

분류에서Dev

FreeRTOS + LWIP -UDP 데이터 전송

분류에서Dev

FreeRTOS + LWIP -UDP 데이터 전송

분류에서Dev

TCP / UDP 및 NAT

분류에서Dev

DependencyService 및 Interface 대리자를 사용하여 xamarin.android 특정 기능의 메서드를 xamarin.forms에 전달하는 방법은 무엇입니까?

분류에서Dev

xamarin forms - actionbar color

분류에서Dev

Xamarin Forms Switch XAML

분류에서Dev

Xamarin Forms Reverse PushModalAsync

분류에서Dev

Xamarin Forms 영역

분류에서Dev

Xamarin Forms DependencyService nullReferenceException

분류에서Dev

Xamarin Forms EventToCommandBehavior

Related 관련 기사

  1. 1

    Xamarin.Forms NavigationPage 및 화면 회전

  2. 2

    Xamarin.Android에서 Xamarin.Forms로 프로젝트 전송

  3. 3

    UDP 송신 및 수신

  4. 4

    Xamarin.Forms Android 로컬 알림이 전송되지 않음

  5. 5

    Xamarin Forms Maps Google 전용?

  6. 6

    단추의 Xamarin.Forms.CarouselView 다음 및 이전 항목 이벤트

  7. 7

    Xamarin.Forms, XAML 및 XMLNS 문제

  8. 8

    Prism Viewmodels WPF 및 Xamarin Forms 공유

  9. 9

    Xamarin.Forms 태블릿 및 휴대폰

  10. 10

    Xamarin Forms 및 Prism, NavigationPage 호출시 오류

  11. 11

    Linux-UDP 패킷을 복제, 전송 및 중복 제거 할 수 있습니까?

  12. 12

    Xamarin 라이선스 및 Xamarin.Forms 선택

  13. 13

    Android 및 클래식 Windows 용 Xamarin 또는 Xamarin.Forms?

  14. 14

    Xamarin Forms AppCenter가 클래스에 전송 된 인식 할 수없는 선택기와 충돌합니다.

  15. 15

    UDP 포트 전달 및 발신 포트

  16. 16

    Xamarin.Forms Android 앱의 버전 및 설정을 처리하는 방법이 올바른가요?

  17. 17

    Xamarin.Android 및 Xamarin.IOS에서 Xamarin.Forms를 사용하는 방법

  18. 18

    부분적 udp 파일 전송

  19. 19

    FreeRTOS + LWIP -UDP 데이터 전송

  20. 20

    FreeRTOS + LWIP -UDP 데이터 전송

  21. 21

    FreeRTOS + LWIP -UDP 데이터 전송

  22. 22

    TCP / UDP 및 NAT

  23. 23

    DependencyService 및 Interface 대리자를 사용하여 xamarin.android 특정 기능의 메서드를 xamarin.forms에 전달하는 방법은 무엇입니까?

  24. 24

    xamarin forms - actionbar color

  25. 25

    Xamarin Forms Switch XAML

  26. 26

    Xamarin Forms Reverse PushModalAsync

  27. 27

    Xamarin Forms 영역

  28. 28

    Xamarin Forms DependencyService nullReferenceException

  29. 29

    Xamarin Forms EventToCommandBehavior

뜨겁다태그

보관