C # - получение кадров по UDP от клиента C ++ - PullRequest
0 голосов
/ 22 февраля 2019

В настоящее время я работаю над проектом, в котором мне нужно отправлять и получать кадры с Jetson TX1 на ПК.В настоящее время у меня есть клиент, которого я нашел на github , но проблема связана с приемной частью.Кадры должны быть приняты на единицу, так как они должны быть отображены в шлеме VR.В настоящее время у меня есть код для получения и отображения фреймов:

using System.Net;
using System.Net.Sockets;
using UnityEngine;
using System;

public class Test : MonoBehaviour
{
    Socket socket;
    int port = 5356;

    private bool stopping = false;
    byte[] buffer;
    int recvMasgSize;
    Texture2D texture;
    Renderer renderer;
    private object e;

    void Start()
    {
        renderer = new Renderer();
        renderer = GetComponent<Renderer>();`enter code here`
        texture = new Texture2D(2, 2);
        IPEndPoint endpointReceive = new IPEndPoint(IPAddress.Any, port);
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        socket.Bind(endpointReceive);
        socket.Blocking = false;
        buffer = new byte[65540];
        Debug.Log("start");
    }

    void Update()
    {
        do
        {
            Debug.Log("waiting");
            recvMasgSize = socket.Receive(buffer);
        } while (recvMasgSize > sizeof(int)); //wait for the first information containing image size
        Debug.Log("received");
        int total_pack = (int) buffer[0];
        Debug.Log(total_pack);
        byte[] longbuf = new byte[4096 * total_pack];
        for (int i = 0; i< total_pack; i++)
        {
            recvMasgSize = socket.Receive(buffer);
            if(recvMasgSize != 4096)
            {
                Debug.Log("received unexpected packet size");
                continue;
            }
            Buffer.BlockCopy(longbuf, i * 4096, buffer, 0, 4096);
        }
        texture.LoadImage(longbuf);
        renderer.material.mainTexture = texture;
    }

}

Установка сокета на блокировку = true просто приводит к сбою единицы, установка его на false приводит к ошибке (SocketException не блокирующая операция сокета можетне было завершено. Я слышал о возможности использования асинхронного метода, но, поскольку все это действительно ново для меня, я не знаю, как их использовать. Я надеюсь, что кто-то может помочь, чтобы я мог продолжить этот проект.

Спасибо всем заранее.

...