Клиент UDP может получать данные, отправленные с того же компьютера, но не может получать данные с другого компьютера через WLAN - PullRequest
0 голосов
/ 25 марта 2019

Я настроил UDP-клиент для получения данных в C #.Клиент настроен на получение с использованием назначенного IP-адреса от моего WiFi-маршрутизатора.Клиент может получать данные, если я запускаю программу на том же компьютере, что и отправитель.Но когда я пытаюсь получить клиент на другом компьютере, клиент не получает никаких данных.

Я попытался установить IP-адрес в UDP-клиенте на IPAddress.Any, это не сработало.Я пробовал другие порты, и это также не работало.

IP-адрес на принимающей стороне установлен на IP-адрес отправителя.IP-адрес отправителя устанавливается на адрес получателя.Номера портов совпадают.

Важная часть кода начинается с Private Void Receive ().

using UnityEngine;
using System.Collections;

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class UDPReceive : MonoBehaviour
{

    // receiving Thread
    Thread receiveThread;

    // udpclient object
    UdpClient client;

    //public string IP = "192.168.0.1";
    public int port; // define > init

    IPAddress ipaddress = IPAddress.Parse("192.168.0.100");

    // infos
    public string lastReceivedUDPPacket = "";
    public string allReceivedUDPPackets = ""; // clean up this from time to time!


    // start from shell
    private static void Main()
    {
        UDPReceive receiveObj = new UDPReceive();
        receiveObj.init();

        string text = "";
        do
        {
            text = Console.ReadLine();
        }
        while (!text.Equals("exit"));
    }
    // start from unity3d
    public void Start()
    {

        init();
    }


    // init
    private void init()
    {
        print("UDPSend.init()");

        // define port
        port = 27015;

        // status
        print("Sending to 192.168.0.100 : " + port);
        print("Test-Sending to this Port: nc -u 192.168.0.100  " + port + "");

        receiveThread = new Thread(
            new ThreadStart(ReceiveData));
        receiveThread.IsBackground = true;
        receiveThread.Start();

    }

    // receive thread
    private void ReceiveData()
    {

        client = new UdpClient(port);
        while (true)
        {

            try
            {

                IPEndPoint anyIP = new IPEndPoint(ipaddress, port);
                byte[] data = client.Receive(ref anyIP);

                string text = Encoding.UTF8.GetString(data);

                print(">> " + text);

                // latest UDPpacket
                lastReceivedUDPPacket = text;

                // ....
                allReceivedUDPPackets = allReceivedUDPPackets + text;

            }
            catch (Exception err)
            {
                print(err.ToString());
            }
        }
    }

    private void OnDisable()
    {
        if (receiveThread != null)
        {
            receiveThread.Abort();
            client.Close();
        }
    }

    // getLatestUDPPacket
    // cleans up the rest
    public string getLatestUDPPacket()
    {
        allReceivedUDPPackets = "";
        return lastReceivedUDPPacket;
    }
}

Я установил IP-адрес клиента на 192.168.0.100, который является IP-адресом.адрес отправителя.

Когда я запускаю программу на своем компьютере, клиент получает.Он не получает на других компьютерах.

Я также пытался установить IP-адрес клиента на его локальный IP-адрес, и это также не работает.

Кажется, что клиент может только получатьчерез локальный хост.

Что-то мне не хватает?Я даже пытался открыть брандмауэр, чтобы разрешить данные на порт 27015. Также не работает.

...