Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> фигня какая-та C# / UDP 
:(
    Опции темы
nginx
  Дата 12.2.2010, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: -4
Всего: -3



Пишу сервер + клиент, чтобы отсылать файлы ( для начала хоть Image ) по UDP , потом хотел аудио-файлы.

***** какая-то  smile в обмениваться простыми сообщениями - без проблем, дело до передачи файла долшло, так  smile  smile  smile  smile  

Ну так вот, трабла очень прикольная

запускаю сервер, ждет файла, в клиенте отсылаю, начинается прием, НО издается странный звук ( с материнки  smile )

Получаю этот еррор

System.Net.Sockets.SocketException was unhandled
  Message="An existing connection was forcibly closed by the remote host"
  Source="System"
  ErrorCode=10054
  NativeErrorCode=10054
  StackTrace:
       at System.Net.Sockets.Socket.ReceiveFrom(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint& remoteEP)
       at System.Net.Sockets.Socket.ReceiveFrom(Byte[] buffer, EndPoint& remoteEP)
       at SimpleUdpSrvr.Main()
  InnerException:

Сервер:
Код

public class SimpleUdpSrvr
{

   public static void Main()
   {

      int recv;
      byte[] data = new byte[102400000000000];

      Thread t = new Thread(new ThreadStart(picsend));
      t.IsBackground.CompareTo(true);
      t.Start();


      IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 8050);

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

      newsock.Bind(ipep);

      Console.WriteLine("Waiting for a client...");

      IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
      EndPoint Remote = (EndPoint)(sender);

      recv = newsock.ReceiveFrom(data, ref Remote);

      Console.WriteLine("Message received from {0}:", Remote.ToString());
      Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));

      string welcome = "Welcome to my test server";
      data = Encoding.ASCII.GetBytes(welcome);
      newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
    

      while(true)
      {
         data = new byte[102400000000000];
         recv = newsock.ReceiveFrom(data, ref Remote);
       
         Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
         newsock.SendTo(data, recv, SocketFlags.None, Remote);
      }

   }


   public static void picsend()
   {

        
      UdpClient receive;
      IPEndPoint receivept = null;

      receive = new UdpClient(8051);


      do
      {
          try
              {
                    byte[] pic = receive.Receive(ref receivept);
                    using (MemoryStream ms = new MemoryStream(pic, 0, pic.Length))
                    {
                        ms.Write(pic, 0, pic.Length);
                        Image im = Image.FromStream(ms, true);

                    }

              }
              catch (Exception ex)
              {
                    MessageBox.Show(ex.ToString());
              }


      } while (true);


   }

}


Клиент
Код

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        UdpClient send, receive;
        IPEndPoint sendpt, receivept;

        Thread t;
  
        public Form1()
        {
            InitializeComponent();
            t = new Thread(new ThreadStart(picsend));
            t.IsBackground.CompareTo(true);
            t.Start();
        }

        [DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);

        private void button1_Click(object sender, EventArgs e)
        {
            mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
            mciSendString("record recsound", "", 0, 0);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            mciSendString("save recsound c:\\record.wav", "", 0, 0);
            mciSendString("close recsound ", "", 0, 0);
            
        }

        private void button3_Click(object sender, EventArgs e)
        {

            OpenFileDialog mydialog = new OpenFileDialog();
            if (mydialog.ShowDialog() == DialogResult.OK)
            {
                string path = mydialog.FileName;
                FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);
                byte[] data = br.ReadBytes(Convert.ToInt16(fs.Length));
                send = new UdpClient();
                sendpt = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8050);
                send.Send(data, data.Length, sendpt);
                send.Close();
            }

        }

        public void picsend()
        {
            receive = new UdpClient(8049);
            do
            {
                try
                {
                    byte[] pic = receive.Receive(ref receivept);
                    using (MemoryStream ms = new MemoryStream(pic, 0, pic.Length))
                    {
                        ms.Write(pic, 0, pic.Length);
                        Image im = Image.FromStream(ms, true);
                        pictureBox1.Image = im;
                    }

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            } while (true);
        }

    }
}


PM MAIL   Вверх
wester
Дата 12.2.2010, 17:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



UDP если не ошибаюсь вроде не является протоколом для гарантированной передачи данных
возможно теряются какие то куски

код не смотрел
PM MAIL   Вверх
nginx
Дата 12.2.2010, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: -4
Всего: -3



wester, ога, но его Скайп юзает, значит работать умеют правильно =(

на msdn просят Tracing чекнуть
PM MAIL   Вверх
wester
Дата 12.2.2010, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



nginx, 
для потоковой передачи где не нужно собирать точно все куски - да. он является очень хорошим средством . но если нужно собрать какой то бинарный обьект из кучи пакетов нужно использовать протокол у которого есть механизм для повторной передачи данных
PM MAIL   Вверх
nginx
Дата 12.2.2010, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: -4
Всего: -3



wester, т.е. только для передачи с микрофона или видео-поток c веб-камеры ( аля live! ) годиться UDP?
просто, про манам я читал, Скайп именно UDP юзает ( + пркиладной протокол поверх UDP ) для аудио/видео

Это сообщение отредактировал(а) nginx - 12.2.2010, 18:37
PM MAIL   Вверх
wester
Дата 12.2.2010, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



nginx, 
а я в книжке читал что UDP в основном нужен для потокового стрима данных, 
просто характерная особенность UDP в том что он не может перезапрашивать потерянный пакет , а просто шлет дальше
PM MAIL   Вверх
nginx
Дата 12.2.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: -4
Всего: -3



wester, ну а что а любой другой протокол не для потокового стрима данных, что ли?
PM MAIL   Вверх
wester
Дата 12.2.2010, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



nginx, 
не ориентированные на стрим данные. как то так.
в других протоколах ведется список всех полученных пакетов и если какой то пакет потерялся то он запрашивается повторно.

PM MAIL   Вверх
nginx
Дата 12.2.2010, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: -4
Всего: -3



wester,

Цитата(wester @  12.2.2010,  19:40 Найти цитируемый пост)
не ориентированные на стрим данные. как то так.
в других протоколах ведется список всех полученных пакетов и если какой то пакет потерялся то он запрашивается повторно.


что-то не пойму, от чего не будет это называться потоковой передачей?

просто данный тип запрашивает повторно, если потерялся пакет, а в случае UDP - нет, но почему это вдруг не стрим? что-то не пойму...
PM MAIL   Вверх
Exai1e
Дата 12.2.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



дебаг
строчка кода которая выдает исключение
анализ исключения
...
PROFIT!

Код

byte[] data = new byte[102400000000000];

м?

Добавлено через 2 минуты и 43 секунды
Цитата(nginx @  12.2.2010,  16:44 Найти цитируемый пост)
запускаю сервер, ждет файла, в клиенте отсылаю, начинается прием, НО издается странный звук ( с материнки  smile )

user posted image

Это сообщение отредактировал(а) Exai1e - 12.2.2010, 19:58


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
nginx
Дата 12.2.2010, 20:02 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: -4
Всего: -3



Exai1e, 
Цитата(Exai1e @  12.2.2010,  19:56 Найти цитируемый пост)
PROFIT!

давай без школьных замашек в общении, ладно?


Цитата(Exai1e @  12.2.2010,  19:56 Найти цитируемый пост)
дебаг
строчка кода которая выдает исключение
анализ исключения

указано, если посмотреть внимательнее на что исключение + код

Цитата(Exai1e @  12.2.2010,  19:56 Найти цитируемый пост)
дебаг

а я его , как будто не делал, спс милый человек, что просвятил ( в VS и так по умолчанию debug, пока сам на release проект не переведешь )


Цитата(Exai1e @  12.2.2010,  19:56 Найти цитируемый пост)
м?

и что не нравиться?
PM MAIL   Вверх
Exai1e
Дата 12.2.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



nginx, да то что у вас сокет закрывается и это видно из exception, если пройтись дебагом то видно где это раз, втотрое можно сделать с помощью try {} catch {} ("обложить" код)
и вообще, совет - создавайте темы в "нужном" разделе, шанс ответа увеличится => например тут:
http://forum.vingrad.ru/forum/dotnet-distr...app-csharp.html
в раздел который вы изначально запостили тему, редко кто заглядывает
гляньте  эту тему, мб поможет:
http://www.rsdn.ru/forum/dotnet/2426699.all.aspx

Добавлено @ 20:08
Цитата(nginx @  12.2.2010,  20:02 Найти цитируемый пост)
и что не нравиться? 

это что за пакет такой долже придти ? с таким размером ?)
по поводу описания error можно глянуть тут:
http://support.microsoft.com/kb/260018

ps. у вас комлекс ? при чем тут школьные замашки и прочее ?
сосдедний пост ваш:
"Без оскорблений, ладно, повежливее, ок? тут все взрослые, школа уже давно позади, умейте держать себя в руках"
сейчас
"давай без школьных замашек в общении, ладно?"
может быть стоит сменить взгляд на мир и не ставить себя "всезнающим "не школьником, а полноценной всевеликой особью муж. пола"" ?
тут на форуме далеко не "школьники" общаются, вы уж поверьте.

Это сообщение отредактировал(а) Exai1e - 12.2.2010, 20:15


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
nginx
Дата 12.2.2010, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: -4
Всего: -3



Цитата(Exai1e @  12.2.2010,  20:06 Найти цитируемый пост)
оздавайте темы в "нужном" разделе, шанс ответа увеличится => например тут:

уже раньше задавал про веб-сервисы, на Винграде .net - это мертвый раздел, быстрее на msdn или же здесь во флейме ответят

Цитата(Exai1e @  12.2.2010,  20:06 Найти цитируемый пост)
это что за пакет такой долже придти ? с таким размером ?)

ну а что, а если меньше пакет будет не пройдет , что ли? =)
я просто для теста сделал это, если вы заметили просто 00000 добавил, чтобы не думать а размерах

а за линки спасибо, буду их изучать сейчас


PS
Насчет лолшто могу кинуть исходники и запустите сами )

Это сообщение отредактировал(а) nginx - 12.2.2010, 20:14
PM MAIL   Вверх
Exai1e
Дата 12.2.2010, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



nginx, попробуйте задать на не винграде,

Цитата(nginx @  12.2.2010,  20:13 Найти цитируемый пост)
ну а что, а если меньше пакет будет не пройдет , что ли? =)

а зачем выделять лишную память ? плохой тон

попробуйте тут просить к примеру:
http://forum.sources.ru/index.php?showforum=199
также:
gordotnet.ru
rsdn.ru
да и в гугле куча примеров по работе с сетями с использованием .net


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
nginx
Дата 12.2.2010, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: -4
Всего: -3



Цитата(Exai1e @  12.2.2010,  20:17 Найти цитируемый пост)
а зачем выделять лишную память ? плохой тон

не С++, тут еще CLR контроллирует и сама урежет


Цитата(Exai1e @  12.2.2010,  20:17 Найти цитируемый пост)
попробуйте тут просить к примеру:
http://forum.sources.ru/index.php?showforum=199
также:
gordotnet.ru
rsdn.ru
да и в гугле куча примеров по работе с сетями с использованием .net 



туфта, уже писал в этой теме, что изначально спросил на msdn англ. ( лучший ресурс по дотНЕТ ) а здесь ради интереса )
http://social.msdn.microsoft.com/Forums/en...ea-efc4e985ddae

ЗЫ
Так отсылать проект, чтобы убедились, что материнка издает звуки? )
щя просто свой сервер перевожу на Ubuntu , посему не могу дать просто линк

дайте свой мэйл, я Вам пришлю )

Это сообщение отредактировал(а) nginx - 12.2.2010, 20:20
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




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


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

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