Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> udp передача данных, передать обратно 
:(
    Опции темы
kokcu
Дата 6.5.2010, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 23.3.2009

Репутация: нет
Всего: нет



Здравствуйте. Есть проблема с пересылкой данных по udp. Слать от клиента к серверу я могу но как сделать, чтобы сервер каждый промежуток времени отсылал на все клиенты некую информацию?
Вот код сервера
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace UDP_server
{
    class Program
    {
        static int recv;
        static byte[] data = new byte[1024]; //данные, которые будут передаваться или приниматься
        static Socket mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        static IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
        static IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
        static EndPoint Remote;
        static Thread t = new Thread(Reciver);
        
         
        static void Main(string[] args)
        {
            Remote = (EndPoint)(sender);
            mysocket.Bind(ipep);
            //запускаем бесконечный цикл, который будет принимать и отправлять данные
            
                //data = new byte[1024];
                ////принимаем данные от клиента. recv содержир размер, т.е. количество принятых символов
                //recv = mysocket.ReceiveFrom(data, ref Remote);
                //string message = Encoding.ASCII.GetString(data, 0, recv);
                //Console.WriteLine(message);
            t.Start();
            
        }
       
        static void Reciver()
        {
            while (true)
            {
                data = new byte[1024];
                //принимаем данные от клиента. recv содержир размер, т.е. количество принятых символов
                recv = mysocket.ReceiveFrom(data, ref Remote);
                string message = Encoding.ASCII.GetString(data, 0, recv);
                Console.WriteLine(message);
            }
        }
        
 
//функция _getHost для сервера отличается только портом. Вместо 9050, отправлять всегда будем на 9051
static private EndPoint _getHost(string text)
{
    //вырезаем из строки только IP адрес формата IPv4
    string host = text.Remove(text.IndexOf(":"), text.Length - text.IndexOf(":"));
 
    //создаем объект адреса. Переменная host уже имеет вид [0-255].[0-255].[0-255].[0-255]
    IPAddress hostIPAddress = IPAddress.Parse(host);
 
    //создаем конечную точку. В нашем случае это адрес сервера, который слушает порт 9051
    IPEndPoint hostIPEndPoint = new IPEndPoint(hostIPAddress, 9051);
    EndPoint To = (EndPoint)(hostIPEndPoint);
    return To;
}

    }
}


Нужно что то вроде функции
Код

Sender()
{
Thread.Sleep(5000);
foreach(//вот нужно как то перебирать клментов и)
{
//слать инфу
}
}


А вот клиент
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace UDP_Client
{
    class Program
    {
        static int recv;
        static byte[] data = new byte[1024]; //данные, которые будут передаваться или приниматься
        static Socket mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        static IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
        static IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
        static EndPoint Remote;
        static Thread c = new Thread(Sender);
        static Thread a = new Thread(Reciver);
        static void Main(string[] args)
        {

            mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);





            c.Start();
            a.Start();
        }

        static void Sender()
        {
            while (true)
            {
                Console.WriteLine("Отправить серверу");
                string text = Console.ReadLine();
                data = Encoding.ASCII.GetBytes(text);

                mysocket.SendTo(data, data.Length, SocketFlags.None, _getHost("127.0.0.1:1111"));
            }
        }
        static void Reciver()
        {
            while (true)
            {
                //вот тут как слушать? 
            }
        }
    
    

 
//функция _getHost
static private EndPoint _getHost(string text)
{
    //вырезаем из строки только IP адрес формата IPv4
    string host = text.Remove(text.IndexOf(":"), text.Length - text.IndexOf(":"));
 
    //создаем объект адреса. Переменная host уже имеет вид [0-255].[0-255].[0-255].[0-255]
    IPAddress hostIPAddress = IPAddress.Parse(host);
 
    //создаем конечную точку. В нашем случае это адрес сервера, который слушает порт 9050
    IPEndPoint hostIPEndPoint = new IPEndPoint(hostIPAddress, 9050);
    EndPoint To = (EndPoint)(hostIPEndPoint);
    return To;
}

    }
}


К нему как то нужно слушалку приделать.
Нашел исходник удп чата но он сложный очень там 3 дня код разбирать, тут все проще)
Подскажите?

PM MAIL   Вверх
kokcu
Дата 6.5.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 23.3.2009

Репутация: нет
Всего: нет



Уже разобрался) может кому пригодиться написал классы для клиента
Код

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

namespace UDP_Client
{
    class netcore
    {
        //инициализация
       static string server_ip = "127.0.0.1";
       static byte[] data = new byte[1024];
       static string input, stringData;
       static UdpClient server = new UdpClient(server_ip, 9050);
       static IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
        //функция будет ждать пока не прийдет что нибудь.
      public static string Recive()
       {
           data = server.Receive(ref sender);
           stringData = Encoding.ASCII.GetString(data, 0, data.Length);
           return stringData;
       }
      public static void Send(string input)
       {
           server.Send(Encoding.ASCII.GetBytes(input), input.Length);
       }
       
    }
}



и для сервера
Код

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

namespace UDP_server
{
    class netsrvcore
    {
       static byte[] data = new byte[1024];
       static IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
       static UdpClient newsock = new UdpClient(ipep);
       static IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);

       public static string Listener()
       {
           
               data = newsock.Receive(ref sender);
               return Encoding.ASCII.GetString(data, 0, data.Length);
       }
       public static void Sender(string txt)
       {
           data = Encoding.ASCII.GetBytes(txt);
           newsock.Send(data, data.Length, sender);
       }
    }

   
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.