Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Религиозные войны > фигня какая-та C# / UDP


Автор: nginx 12.2.2010, 16:44
Пишу сервер + клиент, чтобы отсылать файлы ( для начала хоть 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);
        }

    }
}


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

код не смотрел

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

на msdn просят Tracing чекнуть

Автор: wester 12.2.2010, 18:13
nginx, 
для потоковой передачи где не нужно собирать точно все куски - да. он является очень хорошим средством . но если нужно собрать какой то бинарный обьект из кучи пакетов нужно использовать протокол у которого есть механизм для повторной передачи данных

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

Автор: wester 12.2.2010, 19:17
nginx, 
а я в книжке читал что UDP в основном нужен для потокового стрима данных, 
просто характерная особенность UDP в том что он не может перезапрашивать потерянный пакет , а просто шлет дальше

Автор: nginx 12.2.2010, 19:22
wester, ну а что а любой другой протокол не для потокового стрима данных, что ли?

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

Автор: nginx 12.2.2010, 19:49
wester,

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


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

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

Автор: Exai1e 12.2.2010, 19:56
дебаг
строчка кода которая выдает исключение
анализ исключения
...
PROFIT!

Код

byte[] data = new byte[102400000000000];

м?

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

user posted image

Автор: nginx 12.2.2010, 20:02
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 Найти цитируемый пост)
м?

и что не нравиться?

Автор: Exai1e 12.2.2010, 20:06
nginx, да то что у вас сокет закрывается и это видно из exception, если пройтись дебагом то видно где это раз, втотрое можно сделать с помощью try {} catch {} ("обложить" код)
и вообще, совет - создавайте темы в "нужном" разделе, шанс ответа увеличится => например тут:
http://forum.vingrad.ru/forum/dotnet-distributed-network-net-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. у вас комлекс ? при чем тут школьные замашки и прочее ?
сосдедний пост ваш:
"Без оскорблений, ладно, повежливее, ок? тут все взрослые, школа уже давно позади, умейте держать себя в руках"
сейчас
"давай без школьных замашек в общении, ладно?"
может быть стоит сменить взгляд на мир и не ставить себя "всезнающим "не школьником, а полноценной всевеликой особью муж. пола"" ?
тут на форуме далеко не "школьники" общаются, вы уж поверьте.

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

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

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

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

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


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

Автор: Exai1e 12.2.2010, 20:17
nginx, попробуйте задать на не винграде,

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

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

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

Автор: nginx 12.2.2010, 20:20
Цитата(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-US/netfxbcl/thread/fcb08701-4d57-4d32-adea-efc4e985ddae

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

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

Автор: Exai1e 12.2.2010, 20:21
имхо:  попробуйте  простейшие промеры из гугла по передачи данных по UPD, разберитесь, "пробегитесь по "строчкам"" как станет все понятно, внедрите в свой проект.

вы лучше проект в посту прикрепите, авось кто еще поможет ;)

Автор: nginx 12.2.2010, 20:26
Цитата(Exai1e @  12.2.2010,  20:21 Найти цитируемый пост)
имхо:  попробуйте  простейшие промеры из гугла по передачи данных по UPD, разберитесь, "пробегитесь по "строчкам"" как станет все понятно, внедрите в свой проект.

плохой совет, тут нужно просто открыть соотвествующий раздел msdn ( на msdn и так приведены все ф-ции и примеры все по каждой из них ) + спецификацию UDP, иногда гугл отпадает ( зачем бегать по левым примера, когда есть продуманные специалистами примеры на msdn ).

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

Автор: Exai1e 12.2.2010, 20:29
nginx, 
Цитата(nginx @  12.2.2010,  20:26 Найти цитируемый пост)
Сказал в стиле "капитна очевидности", но я просто против того, чтобы без смысла отправлять людей в гугл, и лазить по левым сайтам с левыми примерами 

и это в край не верно - смотрите:
взяли вы исходник передающих файл из "а" в точку "б" (естесно до этого прочитали про протокол, как реализуется передача, освояли, пробывали, не получается) гляну сорц рабочий, сравнили, уловили ошибки, внедрили в свой софт. отладили, прогулялись по методам которым вам не знакомые (взятые из сорца), почитали, изучили, все гуд =)
p.s. корма больше не дам

Автор: nginx 12.2.2010, 20:35
Exai1e, письмо отослал ( инструкции в письме ), и тут приложу

1). Запускаем сервер ( serv.exe )
2). Запускаем WindowsApp...1.exe
3). Button Play ( послед.-> Выбираем картинку ( др. просто не возьмет аудио или видео, ибо Int16 )
4). отправляем картинку и получаем звук

Цитата(Exai1e @  12.2.2010,  20:29 Найти цитируемый пост)
p.s. корма больше не дам

не понял...

Автор: Exai1e 12.2.2010, 20:39
Добавлено @ 20:41
nginx, да и вообще попросите перекинуть в раздел .net ибо либо тематическая тема либо тролизм не о чем 
прикрепляйте проект =)

Автор: nginx 12.2.2010, 20:50
Статус доставки:
messagedelivery-status1.2

Reporting-MTA: dns; forward11.mail.yandex.net
X-Yandex-Queue-ID: 56A0158A002D
X-Yandex-Sender: rfc822; [email protected]
Arrival-Date: Fri, 12 Feb 2010 20:33:20 +0300 (MSK)

Final-Recipient: rfc822; [email protected]
Original-Recipient: rfc822;[email protected]
Action: failed
Status: 5.7.0
Remote-MTA: dns; aspmx.l.google.com
Diagnostic-Code: smtp; 552-5.7.0 Our system detected an illegal attachment on
your message. Please 552-5.7.0 visit
http://mail.google.com/support/bin/answer.py?answer=6590 to 552 5.7.0
review our attachment guidelines. 25si10059026gxk.11
587


Мдяя... пришел ответ =(


выложил на Яндекс

http://narod.ru/disk/17853740000/udp.zip.html

и

http://narod.ru/disk/17853763000/WindowsFormsApplication1.zip.html

Добавлено через 8 минут и 30 секунд
Цитата(Exai1e @  12.2.2010,  20:06 Найти цитируемый пост)
ps. у вас комлекс ? при чем тут школьные замашки и прочее ?
сосдедний пост ваш:
"Без оскорблений, ладно, повежливее, ок? тут все взрослые, школа уже давно позади, умейте держать себя в руках"
сейчас
"давай без школьных замашек в общении, ладно?"
может быть стоит сменить взгляд на мир и не ставить себя "всезнающим "не школьником, а полноценной всевеликой особью муж. пола"" ?
тут на форуме далеко не "школьники" общаются, вы уж поверьте.

комплекса - нет

Цитата

может быть стоит сменить взгляд на мир и не ставить себя "всезнающим "не школьником

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

про UDP спасибо Вам, но про жизнь не надо, ладно? у меня и так хватает , чтобы все взвесить, учусь на вечерке - и куда больше доволен, чем очным образованием ( в котором пол-группы ( уже 3-ий курс очного обр. ) еще не вышли из рязряды школоты ( от чего тошнит просто, только при взгляди ни них ) ).

И поверьте, весь это набор "лол, лолшто, и прочей хрени" это просто сленг школоты, Вам нравиться опускать, пожалуйста


Цитата

и не ставить себя "всезнающим "не школьником, а полноценной всевеликой особью муж. пола"" ?

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


Цитата

тут на форуме далеко не "школьники" общаются, вы уж поверьте.

ну да, есть еще взрослые, которые хотят почесать свое самолюбие )

Автор: Exai1e 13.2.2010, 09:45
Exai1e, у меня windowsformapplication1 при запуске падает с ошибкой (windows ищет устранение данной ошибки... бла бла бла)

Автор: Exai1e 13.2.2010, 10:05
nginx, кстати попробуйте передавать файл маленького размера. например txt в 10 строк. сейчас хожу по темам, у кого возникала подобная ошибка (excpetion) случается это если файл довольно? больших размеров.
наткнулся еще на такое:
http://notesatprograming.blogspot.com/2009/10/mscrm-error-existing-connection-was.html

Автор: nginx 13.2.2010, 11:43
Цитата(Exai1e @  13.2.2010,  09:45 Найти цитируемый пост)
Exai1e, у меня windowsformapplication1 при запуске падает с ошибкой (windows ищет устранение данной ошибки... бла бла бла) 

перекомпилиете проект, исходы я же вложил, там ничего сложного

Цитата(Exai1e @  13.2.2010,  10:05 Найти цитируемый пост)
nginx, кстати попробуйте передавать файл маленького размера. например txt в 10 строк. 

с этим проблем нет, передается, а картинка больше 100Kb уже нет

Автор: wester 13.2.2010, 11:57
Цитата

с этим проблем нет, передается, а картинка больше 100Kb уже нет

а почему не передается ?

Автор: nginx 13.2.2010, 12:20
Цитата(wester @  13.2.2010,  11:57 Найти цитируемый пост)
а почему не передается ? 

сам бы хотел знать... :(

Автор: Exai1e 13.2.2010, 13:01
nginx, с другого форума, по вашему exception
Цитата

Вернемся к исходному коду. Во-первых, поставьте и в цикл сервера и в цикл клиента задержку, хоть какую-то. Смотрите на это хотя бы с той стороны, что это является плохим тоном, т.е. у Вас должно быть представление в какой момент времени от начала секунды что происходит, а в Вашем варианте получается мешанина. А ошибка возникает скорее всего из-за того, что на клиент Вы отправляете данные, но клиентом их не считатываете. По умалчиванию буффер приема, если не ошибаюсь, равен 4096 байт.

возможно вам поможет данная инф.

также еще:
Цитата

An existing connection was forcibly closed by the remote host
   1.      Открыть редактор реестра.
  2.      Найти следующий раздел реестра и выбрать Parameters (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters)
   3.      Добавьте следующий параметр реестра:         
*            Имя: SynAttackProtect        
*            Тип: DWORD         
*            Значение: 00000000  
4.      Закрыть редактор реестра.

Автор: elmer 4.4.2011, 21:28
Может у кого есть готовый проект обмена сообщениями на базе протокола UDP киньте на [email protected] или ссылку. мой icq-645991845 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)