Проблема UDP с неприемом - PullRequest
0 голосов
/ 18 декабря 2009

Я новичок в сетевом программировании, и у меня возникла проблема с некоторым кодом, который я тестировал как основу для программы чата в локальной сети.

Код сервера:

public static void Main()
    {

        UdpClient publisher = new UdpClient("230.0.0.1", 8899);
        UdpClient subscriber = new UdpClient("230.0.0.2", 8800);
        IPAddress addr = IPAddress.Parse("230.0.0.1");
        subscriber.JoinMulticastGroup(addr);
        Console.WriteLine("Running chat program at 230.0.0.1:8899");


        while (true)
        {
            IPEndPoint ep = null;
            byte[] chats = subscriber.Receive(ref ep);
            string chatstring = Encoding.ASCII.GetString(chats);
            Console.WriteLine(chatstring);


            string msg = String.Format(chatstring);
            byte[] sdata = Encoding.ASCII.GetBytes(msg);
            publisher.Send(sdata, sdata.Length);



            System.Threading.Thread.Sleep(500);
        }
    }

И клиентская программа:

static void Main(string[] args)
        {

            UdpClient subscriber = new UdpClient("230.0.0.1", 8899);

            IPAddress addr = IPAddress.Parse("230.0.0.1");
            subscriber.JoinMulticastGroup(addr);
            IPEndPoint ep = null;
            Thread SendChats = new Thread(Send);
            SendChats.Start();
            while (true)
            {
                byte[] receivedbytes = subscriber.Receive(ref ep);
                string receivedchats = Encoding.ASCII.GetString(receivedbytes);
                Console.WriteLine(receivedchats);
                Thread.Sleep(500);
            }
        }

        static void Send()
        {
            UdpClient publisher = new UdpClient("230.0.0.2", 8800);



            while (true)
            {
                string msg = Console.ReadLine();
                byte[] sdata = Encoding.ASCII.GetBytes(msg);
                publisher.Send(sdata, sdata.Length);
                Thread.Sleep(400);
            }

        }

По моим наблюдениям, серверная программа ДОЛЖНА получать данные от клиента, но, увы, после того, как сообщение набрано и доставлено, ничего не проходит. Я что-то упустил?

1 Ответ

1 голос
/ 18 декабря 2009

Ваш подписчик присоединяется к неправильной многоадресной рассылке на сервере?

UdpClient subscriber = new UdpClient("230.0.0.2", 8800);
IPAddress addr = IPAddress.Parse("230.0.0.1");
subscriber.JoinMulticastGroup(addr);

Возможно, должно быть:

IPAddress addr = IPAddress.Parse("230.0.0.2");

Также - есть ли у вас какие-либо маршрутизаторы / коммутаторы между клиентом / сервером, поскольку они будут предотвращать многоадресный трафик, если специально не настроен для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...