Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
45 / 45 / 9
Регистрация: 19.11.2012
Сообщений: 124

Клиент-серверное приложение

16.03.2013, 01:40. Показов 1845. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здарвствуйте уважаемые форумчане, есть такое приложение (создано исключительно для теста соединения):

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Timers;
 
class Program
{
    static Mutex mtx = new Mutex();
    static void Main(string[] args)
    {
        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //Создаем основной сокет
        IPAddress ipAddress = null; //IP-адресс
        IPEndPoint Addr = null; //конечная точка(IP и порт)
 
        Console.WriteLine("1 - Server\n2 - Client");
        switch (Console.ReadKey(true).KeyChar)
        {
            case '1':
                Console.Title = "Server"; //Сервер
                //ipAddress = Dns.GetHostEntry("127.0.0.1").AddressList[0]; //Преобразовуем адрес или IP узла в массив IP и берем первый
                Addr = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3128); //"localhost" = 127.0.0.1
                s.Bind(Addr); //"Адресуем" сокет
                s.Listen(10); //Обозначаем количество ожидающих в очереди на подключение
                Console.WriteLine("Ждем коннекта...");
                while(true)
                {
                    Socket cl_s = s.Accept(); //Ожидаем подключения
                    Thread ClientThread = new Thread(delegate() { ProcessClient(cl_s); });
                    ClientThread.Start();
                }
            break;
 
            case '2':
            s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            ipAddress = IPAddress.Parse("127.0.0.1");
            Addr = new IPEndPoint(ipAddress, Int32.Parse("3128")); //"localhost" = 127.0.0.1
            string msg = "";
            try
            {
                s.Connect(Addr); //Коннектимся к сeрверу
                sendMessage(s, "connect");
                msg = receiveMessage(s);
                ConsoleWrite("MESSAGE: " + msg);
            }
            catch
            {
                ConsoleWrite("Error1");
            }
            if (msg == "connected")
            {
                sendMessage(s, "name");
                ConsoleWrite("Connected!");
            }
            else
            {
                ConsoleWrite(msg);
            }
            break;
        }
        s.Close(); //Закрываем сокет
        Console.ReadKey();
    }
    static void ProcessClient(Socket cl_s)
    {
        string name = "default";
        int startFlag = 0;
        while (true) //Пока не нажата клавиша
        {
            if (cl_s.Available != 0)
            {
                string message = "";
                message = receiveMessage(cl_s);
                ConsoleWrite("MESSAGE:" + message);
                switch (message)
                {
                    case "connect":
                        sendMessage(cl_s, "connected");
                        name = receiveMessage(cl_s);
                        ConsoleWrite(name + " подключился к серверу!");
                    break;
                }
            }
 
        }
        cl_s.Close(); //Закрываем сокет
    }
    static void ConsoleWrite(string message)
    {
        mtx.WaitOne();
        Console.WriteLine(message);
        mtx.ReleaseMutex();
    }
    static void sendMessage(Socket s, string message)
    {
        if (s.Poll(10000, SelectMode.SelectWrite) == false)
        { }
        byte[] msgToSent = Encoding.UTF8.GetBytes(message);
        s.Send(msgToSent, 0, msgToSent.Length, SocketFlags.None);
    }
 
    static string receiveMessage(Socket s)
    {
        if (s.Poll(1000000, SelectMode.SelectRead) == false)
            return "ERROR";
        string result;
        int buffCnt = s.Available;
        int recCnt = 0;
        byte[] msg = new byte[buffCnt];
        while (recCnt != buffCnt)
            recCnt = s.Receive(msg, 0, buffCnt, SocketFlags.None);
        result = Encoding.UTF8.GetString(msg);
        return result;
    }
}
В этом приложении серверу отправляется сообщение "connect" и, если сервер возвращает сообщение "connected" выводится соотв. месседж.

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

Добавлено через 3 часа 5 минут
UP.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.03.2013, 01:40
Ответы с готовыми решениями:

Клиент-серверное приложение
Всем добрый день(вечер, утро). У меня задача: клиент-серверное приложение. В самом начале работы сервер выбирает устройство из списка...

Клиент серверное приложение
Есть приложения, но у меня при отключении клиента от сервера, сервер тоже закрывается.Как сделать чтобы сервер оставался работать дальше?Ну...

Клиент-Серверное приложение на C#
Доброго времени суток. Возможно я буду не первым кто задает подобны вопрос, но все же: подскажите хорошую литературу с примерами, по...

2
 Аватар для MrGladus
178 / 178 / 50
Регистрация: 06.01.2013
Сообщений: 392
16.03.2013, 02:53
А какая собственно разница между соединением по интернету и локальной сетью? Интернет - это оооочень большая сеть. В данном приложении используется сокет для установления соединения, а также протокол передачи данных Tcp, что гарантирует доставку даных. Да вы лучше почитайте литературу вначале о сетевом программировании, а что не ясно тогда уже спрашивайте. По вашему вопросу целые книги пишут с сотнями страниц, и если подробно обо всем рассказывать то выйдет еще одна книга
0
45 / 45 / 9
Регистрация: 19.11.2012
Сообщений: 124
16.03.2013, 10:49  [ТС]
Когда пишу прокси, вместо локального адреса, программа не может адресовать сокет и выдает ошибку. Не понятно почему, подозрение, что что-то блокирует порты, но возможно дело в другом. Какие могут быть причины невозможности адресации сокета? Прокси проверял - пингуется и доступно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.03.2013, 10:49
Помогаю со студенческими работами здесь

Клиент-серверное приложение
Народ, у меня не хочет работать приложение. Скажите, что я делаю не так? Будет здорово, если мой код поправите. Сервер каждые 100...

Клиент-серверное приложение
Как создать Клиент-серверное приложение чтоби бил 1 сервер и возможность подключения к нему нескольким клиентам Желательно пример в форме.

Клиент-серверное приложение
Клиент записывает текст в файл и отправляет его серверу. сервер записывает данный текст в обратном порядке записывает в файл и отправляет...

Клиент-серверное приложение
Создала клиент-серверное приложение.У меня код клиента в одном проекте,код сервера в другом.Скиньте пример когда клиент и сервер в одном...

Простое клиент серверное приложение
Поясню. Есть серверное приложение (оно на сервере) есть клиентское приложение, его запускают на компьютере под обычным пользователем. ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru