Клиент-серверная связь. Сокеты. Помогите пожалуйста
|
|
Saitei | Дата: Пятница, 17 Августа 2012, 23:25 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Что можно почитать, чтобы вкурить всё это дело? ЯП: C#. Хотелось бы написать что-то вроде чата, но, увы, знаний не хватает. Единственное, что я понял... Так это то, что мне понадобится: Code using System.Net; using System.Net.Sockets; using System.Threading; что почитать? Всякие уроки и маленькие статьи бегло рассказывают... Не то это. Хотелось бы, чтобы я на все 100 знал каждую строку программного кода
|
|
| |
DeusEx-12 | Дата: Суббота, 18 Августа 2012, 00:02 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| Пример можете глянуть тут http://www.codeproject.com/Articles/12286/Simple-Client-server-Interactions-using-C http://www.codeproject.com/Articles/14155/An-Asynchronous-Socket-Server-and-Client Может поможет разобраться.
На русском есть: тут http://www.cyberforum.ru/csharp-net/thread205085.html и http://pyha.ru/forum/topic/2945.0
Ищем партнёров в РФ для реализации (продажи) и поддержки ПО
Сообщение отредактировал DeusEx-12 - Суббота, 18 Августа 2012, 00:03 |
|
| |
Saitei | Дата: Суббота, 18 Августа 2012, 00:08 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| DeusEx-12, за первые две конечно большое спасибо, Quote (DeusEx-12) На русском есть: тут http://www.cyberforum.ru/csharp-net/thread205085.html и http://pyha.ru/forum/topic/2945.0 но зато вот эти я уже знаю. Множество аспектов опущено и как-то странно прокомментировано. Скажу короче: мне этого просто мало для понимания. Как быть? Разве нет ни одного грамотно написанного текста, где всё разложено по полочкам?Добавлено (18.08.2012, 00:08) --------------------------------------------- p.s. по сути дела я был бы рад даже передать ту же переменную типа string куда-нибудь на сервер) Состыковать их и меняться переменными
|
|
| |
DeusEx-12 | Дата: Суббота, 18 Августа 2012, 00:59 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Может и есть, но я не видел этого в рамках отдельных статей, тем более на русском. Хотя это не моя специализация, возможно кто-либо более грамотный в этой теме поможет Вам. советую Вам взять более объемные "справочники" и искать там.
Ищем партнёров в РФ для реализации (продажи) и поддержки ПО
|
|
| |
|
nilrem | Дата: Суббота, 18 Августа 2012, 08:13 | Сообщение # 6 |
Просветленный разум
Сейчас нет на сайте
| Quote (Saitei) что почитать? Всякие уроки и маленькие статьи бегло рассказывают... Не то это. Хотелось бы, чтобы я на все 100 знал каждую строку программного кода Разве нет ни одного грамотно написанного текста, где всё разложено по полочкам? MSDN почитай. Там начиная от основ и заканчивая примером простых клиента и сервера.
Windmill 2
WindMill 2D Game Engine
|
|
| |
Saitei | Дата: Суббота, 18 Августа 2012, 17:01 | Сообщение # 7 |
старожил
Сейчас нет на сайте
| Quote (nilrem) MSDN почитай. Там начиная от основ и заканчивая примером простых клиента и сервера. на сайте microsoft не нашёл что-либо касаемо сокетов. Скорее всего плохо искал :-( Ссылку можно?
Добавлено (18.08.2012, 13:10) --------------------------------------------- Quote (anton-gar) Почитай статьи о винсокетах. речь идёт о WinSock.h? У C# своя работа с сетью, если не ошибаюсь. Технология .NET же
Добавлено (18.08.2012, 16:15) --------------------------------------------- Пока что дошёл только до этого... : Code using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; using System.Timers;
namespace server { class mainStart { static void Main(string[] args) { IPAddress ipAddr = null; //IP-Адрес IPEndPoint Addr = null; //IP и порт int portInUse = 5300; System.Console.Title="Сервер"; /*Название окна*/ Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); /*Создание основного сокета. AddressFamily - указание на тип семейства адресов (InterNetwork = IPv4), * SocketType - указание на тип сокетного подключения, ProtocolType - используемый протокол для передачи данных */ Console.WriteLine("Запуск сервера..."); Console.WriteLine("Прослушиваемый порт: "+ portInUse); Addr = new IPEndPoint(IPAddress.Any, portInUse);
} } }
Смешно, наверное... Ну помогите мне кто-нибудь, одному очень тяжко... Справочник microsoft мой мозг жуётДобавлено (18.08.2012, 17:01) ---------------------------------------------
Code using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; using System.Timers;
namespace server { class mainStart { static void Main(string[] args) { IPAddress ipAddr = null; //IP-Адрес IPEndPoint Addr = null; //IP и порт int portInUse = 5300; System.Console.Title="Сервер"; /*Название окна*/ Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); /*Создание основного сокета. AddressFamily - указание на тип семейства адресов (InterNetwork = IPv4), * SocketType - указание на тип сокетного подключения, ProtocolType - используемый протокол для передачи данных */ Console.WriteLine("Запуск сервера..."); Addr = new IPEndPoint(IPAddress.Any, portInUse); s.Bind(Addr); s.Listen(30); /*Порт ставим в режим прослушивания. Поддерживаем 30 подключений*/ Console.WriteLine("Прослушиваемый порт: "+ portInUse); Console.WriteLine("Адрес: " + Addr);
Console.ReadKey(); } } } Вот теперь я в тупике. Не знаю что делать далее... Ну помогите же, люди...
Сообщение отредактировал Saitei - Суббота, 18 Августа 2012, 16:49 |
|
| |
karuy | Дата: Суббота, 18 Августа 2012, 17:20 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| Ну в чем тебе помочь? Что у тебя так упорно не выходит?
|
|
| |
Saitei | Дата: Суббота, 18 Августа 2012, 17:23 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| karuy, вот я в коде поставил порт 5300 на прослушивание (адрес выглядит как 0.0.0.0:5300). Как получать\отправлять пакеты? Что-то вычитал про Accept(); , но маловато... И как проверить, что порт ДЕЙСТВИТЕЛЬНО прослушивается?
|
|
| |
karuy | Дата: Суббота, 18 Августа 2012, 17:40 | Сообщение # 10 |
заслуженный участник
Сейчас нет на сайте
| Quote (Saitei) Как получать\отправлять пакеты? http://forum.vingrad.ru/index.php?showtopic=35842& Quote (Saitei) И как проверить, что порт ДЕЙСТВИТЕЛЬНО прослушивается? Набросай клиента, попробуй сконектиться, отослать данные. Quote (Saitei) Что-то вычитал про Accept(); http://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.accept.aspx В msdn все есть и все расписано.
|
|
| |
Saitei | Дата: Суббота, 18 Августа 2012, 17:42 | Сообщение # 11 |
старожил
Сейчас нет на сайте
| Quote (karuy) http://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.accept.aspx В msdn все есть и все расписано. Там и вычитал)) Quote (karuy) Набросай клиента, попробуй сконектиться, отослать данные. Нет, я вопрос задал не так. Как проверить, что программой начал использоваться порт? Ведь тот или иной порт может быть занят другой любой программой (т.е. закрыт)
|
|
| |
karuy | Дата: Суббота, 18 Августа 2012, 17:44 | Сообщение # 12 |
заслуженный участник
Сейчас нет на сайте
| Не понимаю почему у тебя проблемы и ты теряешься, все обернуто в классы, тебе не нужно изобретать костыли, а только юзать готовое. Добавлено (18.08.2012, 17:44) ---------------------------------------------
Quote (Saitei) Ведь тот или иной порт может быть занят другой любой программой (т.е. закрыт) Исключения получишь ObjectDisposedException - Объект Socket закрыт. Опять ж таки http://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.listen.aspx
|
|
| |
Saitei | Дата: Суббота, 18 Августа 2012, 17:45 | Сообщение # 13 |
старожил
Сейчас нет на сайте
| Send() и Accept() мне в помощь! Капец, гениально!))) Я целый день бился об стену
|
|
| |
karuy | Дата: Суббота, 18 Августа 2012, 17:50 | Сообщение # 14 |
заслуженный участник
Сейчас нет на сайте
| Скорее Send и Receive. Если ты имел ввиду отправку/получения данных.
|
|
| |
Saitei | Дата: Суббота, 18 Августа 2012, 17:51 | Сообщение # 15 |
старожил
Сейчас нет на сайте
| karuy, интересуют ObjectDisposedException и SocketException... Не смог их использовать, я явно что-то понял не так
|
|
| |
karuy | Дата: Суббота, 18 Августа 2012, 18:00 | Сообщение # 16 |
заслуженный участник
Сейчас нет на сайте
| Ну обрабатываешь как и любое другое исключения, что-то такое: Code try { s.Listen(30); } catch ( ObjectDisposedException e ) { Console.WriteLine(e->Message ); }
|
|
| |
Saitei | Дата: Суббота, 18 Августа 2012, 18:05 | Сообщение # 17 |
старожил
Сейчас нет на сайте
| karuy, Code using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; using System.Timers;
namespace server { class mainStart { static void Main(string[] args) { IPAddress ipAddr = null; //IP-Адрес IPEndPoint Addr = null; //IP и порт int portInUse = 5300; System.Console.Title="Сервер"; /*Название окна*/ System.Console.ForegroundColor = ConsoleColor.Green; /*Весь текст в консоли теперь зелёный! ^^*/ Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); /*Создание основного сокета. AddressFamily - указание на тип семейства адресов (InterNetwork = IPv4), * SocketType - указание на тип сокетного подключения, ProtocolType - используемый протокол для передачи данных */ Console.WriteLine("Запуск сервера..."); Addr = new IPEndPoint(IPAddress.Any, portInUse); s.Bind(Addr); try { s.Listen(30); /*Порт ставим в режим прослушивания. Поддерживаем 30 подключений*/ } catch (ObjectDisposedException e) { Console.WriteLine(e->Message); } Console.WriteLine("Прослушиваемый порт: "+ portInUse); Console.WriteLine("Адрес: " + Addr);
Console.ReadKey(); } } } подчеркнуло красным e->Message. Ругается на "->": Quote Error 2 The * or -> operator must be applied to a pointer C:\Users\Vlad\AppData\Local\Temporary Projects\server\mainStart.cs 34 35 server Добавлено (18.08.2012, 18:05) --------------------------------------------- fix: Code Console.WriteLine(e.Message);
|
|
| |
karuy | Дата: Суббота, 18 Августа 2012, 18:06 | Сообщение # 18 |
заслуженный участник
Сейчас нет на сайте
| e.Message с плюсами попутал.
|
|
| |
Saitei | Дата: Суббота, 18 Августа 2012, 18:09 | Сообщение # 19 |
старожил
Сейчас нет на сайте
| karuy, я как понял все исключения обрабатываются через catch? Т.е. если сокет будет закрыт, то только в этом случае выполнится весь код, что стоит после catch'a?
|
|
| |
karuy | Дата: Суббота, 18 Августа 2012, 18:11 | Сообщение # 20 |
заслуженный участник
Сейчас нет на сайте
| Да.
|
|
| |