Понедельник, 06 Мая 2024, 05:27

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Форум игроделов » Программирование » Общие обсуждения программистов » Клиент-серверная связь. Сокеты. Помогите пожалуйста
Клиент-серверная связь. Сокеты. Помогите пожалуйста
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
постоянный участник
Сейчас нет на сайте
Может и есть, но я не видел этого в рамках отдельных статей, тем более на русском. Хотя это не моя специализация, возможно кто-либо более грамотный в этой теме поможет Вам. советую Вам взять более объемные "справочники" и искать там.

Ищем партнёров в РФ для реализации (продажи) и поддержки ПО
anton-garДата: Суббота, 18 Августа 2012, 01:16 | Сообщение # 5
WEBmaster
Сейчас нет на сайте
Основу сокетов и потоков могу объяснить, но синтаксиса C# не знаю.
Почитай статьи о винсокетах.


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
заслуженный участник
Сейчас нет на сайте
Да.
Форум игроделов » Программирование » Общие обсуждения программистов » Клиент-серверная связь. Сокеты. Помогите пожалуйста
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг