Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
DeGroup
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95
1

Как организовать работу клиент-серверного приложения через Интернет

24.02.2012, 12:40. Просмотров 2020. Ответов 6
Метки нет (Все метки)

Доброго времени суток.

Сразу извиняюсь, если вопрос будет глупым.
Пишется программа, что то в виде Скайпа
Клиент:
1. Захват изображения с камеры (сделано)
2. Захват скриншота экрана (сделано)
3. Захват звука с микрофона (сделано)
4. Передача по UDP протоколу на сервер (сделано)
Сервер:
Прием всех данных от клиента (сделано)

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

Фаервол?
Как это обойти?
Если есть мысли, то поделитесь.

Добавлено через 6 минут
Порты на удаленном компе открыты.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2012, 12:40
Ответы с готовыми решениями:

Архитектура клиент-серверного приложения для многопользовательской работы через интернет в real-time режиме
Приветствую уважаемое сообщество. Нужно срочно собрать мысли по следующей теме. Необходимо...

Ишу рабочий пример клиент-серверного приложения для просмотра списка процессов через сеть
Если у кого-то имеется подобное или кто-нибудь где-нибудь видел, поделитесь)

Как реализовать синхронизацию самовыделения сервера в одноранговой сети клиент-серверного приложения С#?
Имеется локальная сеть. При появлении клиента в ней, он должен проверить имеется ли сервер, с...

TCP: организация клиент-серверного приложения
Подскажите, пожалуйста, как реализовать клиент-серверное приложение, которое: Клиент: 1 кнопка,...

Нюансы организации клиент-серверного приложения
Всем привет! Ребята помогите определится с выбором, практического опыта не много, необходимо...

6
StudAssistant
Эксперт
34811 / 27003 / 5019
Регистрация: 17.04.2006
Сообщений: 49,622
24.02.2012, 12:40
Закажите контрольную, курсовую, диплом или любую другую студенческую работу здесь.
6
outoftime
║XLR8║
860 / 753 / 229
Регистрация: 25.07.2009
Сообщений: 3,723
Записей в блоге: 5
24.02.2012, 18:42 2
1. Есть еще такая штука "NAT" называется, в вики можно прочитать, ее сложно обходить, костыли надо ставить и не на локалке а у провайдера.

2. Хотя может быть вариант по проще:
- сервер слушаем свой локальный IP сервера узнаем через cmd -> ipconfig
- клиент конектимся к внешнему IP сервера узнаем через любой онлайн веб сервис (http://www.myip.net/)
Если не полчится тогда скорее всего проблема в (1).

Добавлено через 1 минуту
И да не забудь перепроверить проброс портов на модеме сервака, при каждом запуске сервака внутренний IP локалки может меняться.
1
DeGroup
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95
24.02.2012, 18:53  [ТС] 3
Я и пошел по варианту №2 знаю локальный IP компа, знаю внешний IP, тока не выходит, может по 80 порту передавать, он вроде всегда открыт?

Добавлено через 3 минуты
С адресом потом разберемся, пока myip.net но потом фиксированный можно оформить, просто не понятно если комп пингуется и порты открыты то он должен принимать данные.

Добавлено через 1 минуту
Быстрей всего NAT блин. Значит ничего не получится?
0
outoftime
║XLR8║
860 / 753 / 229
Регистрация: 25.07.2009
Сообщений: 3,723
Записей в блоге: 5
24.02.2012, 23:52 4
Цитата Сообщение от DeGroup Посмотреть сообщение
фиксированный можно оформить
Цитата Сообщение от DeGroup Посмотреть сообщение
Значит ничего не получится?
Я что-то не понял, фиксированный можно оформить? Если на серваке все гуд с клиентом проблем не будет, просто в сессии привязку к IP не делать вот и все.
0
DeGroup
7 / 7 / 1
Регистрация: 16.01.2012
Сообщений: 95
27.02.2012, 12:26  [ТС] 5
Может я туплю.... Но

Серверный Комп:
Знаю его внутренний IP (например 192.168.0.20)
C#
1
2
3
4
5
6
7
8
9
            IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName());
            Regex regex = new Regex(@"\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?");
            Match match;
            foreach (IPAddress ip_ in ip)
            {
                match = regex.Match(ip_.ToString());
                if (match.Success)
                    IPHost = ip_.ToString();
            }
запускается нитка для приема данных от клиента
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
    public class NetProcess
    {
        public byte Num;
        public UdpClient UPDLister; // листер
        public IPEndPoint EPGroup; // точка
        public bool _NetStart = false; // признак запуска нитки
 
        public static Graphics graphics;
 
 
        public Thread NetThread;
        //-------------------------- 
        public NetProcess(byte Number, Form ControlForm)
        {
            UPDLister = new UdpClient(Int32.Parse(MainForm.MainPort));
            EPGroup = new IPEndPoint(IPAddress.Any, Int32.Parse(MainForm.MainPort));
 
            _NetStart = true;
            NetThread = new Thread(new ThreadStart(Process));
            NetThread.IsBackground = true; // убить поток после завершения проги
            NetThread.Name = "NetThread_" + Num.ToString();
            NetThread.Start();
        
        }
        //---------------------------------------
        ~NetProcess()
        {
            ;
        }
        //----------------------------------------
        public void Process()
        {
            try
            {
                while (_NetStart)
                {
                    using (MemoryStream MStream = new MemoryStream())
                    {
                        byte[] ReceiveBytes = UPDLister.Receive(ref EPGroup);
                        MStream.Position = 0;
                        MStream.Write(ReceiveBytes, 0, ReceiveBytes.Length);
 
                    }
                }
            }
            catch (Exception e)
            {
                return;
            }
 
        }
        //---------------------------------------
        public void NetClose()
        {
            _NetStart = false;
            //NetThread.Abort();
            UPDLister.Close();
        }
        //---------------------------------------
    }// public class NetProcess
Теперь клиент:
Предположим я знаю его внешний IP ну при помощи сервиса myip (например 76.129.12.2)
Клиент конектится к этому IP (так как он пингуется)
C#
1
2
3
                UDPSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                IPAddress IPServerAdress = IPAddress.Parse(MainForm.IPServer);
                PEPoint = new IPEndPoint(IPServerAdress, Int32.Parse(MainForm.PortServer));
и шлет данные
C#
1
2
3
4
                    byte[] CaptureImageBuff = MStream.ToArray();
                    UDPSocket.SendBufferSize = CaptureImageBuff.Length;
                    UDPSocket.ReceiveBufferSize = CaptureImageBuff.Length;
                    UDPSocket.SendTo(CaptureImageBuff, PEPoint);
Контакта нет
что не так?

Добавлено через 5 минут
По локалке канает, а по инету нет
0
AleksBak
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
28.02.2012, 19:26 6
Видеопоток через другой порт идет скорее всего. Доступ к этому порту открыт на внешнем маршрутизаторе? Или в нет сервер напрямую выходит?
0
outoftime
║XLR8║
860 / 753 / 229
Регистрация: 25.07.2009
Сообщений: 3,723
Записей в блоге: 5
28.02.2012, 22:19 7
Цитата Сообщение от DeGroup Посмотреть сообщение
Знаю его внутренний IP (например 192.168.0.20)
Ну раз знаешь ип, так юзай его, точно не скажу, но всем заморочкам с днс я недоверяю, я через него только IPAddress по хосту типа "192.168.0.20" достаю

И да, еще раз проверь настроен ли проброс портов на сервере (настройки модема перепроверь)!
0
28.02.2012, 22:19
StackOverflow
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2012, 22:19

Неправильная работа клиент серверного приложения
Нашел в msdn исходники простых клиента и сервера, скомпилил в качестве консольных приложений - все...

Создание клиент-серверного приложения на C#.NET
Руководство поставило задачу создать программу типа "клиент-сервер", которая быстро инсталлируется...

подскажите с реализацией клиент - серверного приложения
Здравствуйте! Подскажите. Необходимо написать подобного рода программу(клиент серверное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru