powered by simpleCommunicator - 2.0.27     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / общение tcp клиентов через tcp сервер C#
11 сообщений из 11, страница 1 из 1
общение tcp клиентов через tcp сервер C#
    #40080242
IRagnarok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

Мало разбираюсь в пакетах, соединениях, портах и тд. (все знания о таких вещах поверхностны).
Встала задача написать программу на телефон (javascript) которая бы получала данные с ПК (C#) на котором есть база данных (sql или access, не столь важно). Так как и то и другое устройство в теории может быть за Nat то решил добавить в эту структуру сервер с белым адресом.

Моё видение решения:
1.Сначала ПК-клиент подключается к серверу и держит соединение постоянно.(Сервер его записал как "Клиент-1")
2.Подключаемся с Телефона-клиента к серверу (сервер его записывает как "Клиент-2") и отправляем запрос на получение данных с "Клиент-1"(как телефон будет идентифицировать свою базу ПК-клиента, я уже порешал).
3.Сервер ставит "Клиент-2" на удержание и ищет в своей записной книжке "клиент-1" и передаёт ему запрос с "Клиент-2".
4."Клиент-1" ищет у себя запрашиваемые данные в базе, потом отправляет обратно ответ Серверу.
5. Сервер ищет теперь в записной книжке "Клиент-2" и передаёт ему данные от "клиент-1" и закрывает у него соединение.
6."клиент-1" соединение остаётся открытым. (что то типа веб-хука)

Написал клиент к ПК-клиент, Клиент на Телефон-клиент и серверное на ПК-сервер.
ПК-клиент и Телефон-клиент у меня успешно подключаются к серверу, но не пойму как идентифицировать(записывать в книжечку) каждого и отправлять с одного конкретного клиента на другого конкретного клиента данные(через сервер естественно). Основная проблема стоит в идентификации и способе передаче.(может быть какой то тоннель можно создать между двумя клиентами)

Посему прошу вас, уважаемых, желательно без лишних тупых вопросов, ответить:
Как лучше всего мне реализовать общение информацией между клиентом и клиентом через сервер. (сразу отвечу. Клиентов может быть и десяток, но каждый должен видеть информацию со своего парного клиента, так что рассылка всем сразу отпадает).

Прошу помимо теории хотя бы пару строчек кода приложить, чтобы я мог хоть за что то зацепиться.
Уже месяц мучаюсь мозг кипит !!!!!!!!!!!!!
...
Рейтинг: 0 / 0
общение tcp клиентов через tcp сервер C#
    #40080246
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SignalR
...
Рейтинг: 0 / 0
общение tcp клиентов через tcp сервер C#
    #40080266
IRagnarok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На всякий случай выложу мой код:
Сервер:
Код: 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.
 class Program
    {
        const int port = XXXX;
        static TcpListener listener;
        static void Main(string[] args)
        {
            try
            {
                listener = new TcpListener(IPAddress.Parse("XX.XXX.XX.XX"), port);
                listener.Start();
                Console.WriteLine("Listening...");

                while (true)
                {
                    TcpClient client = listener.AcceptTcpClient();
                    ClientObject clientObject = new ClientObject(client);

                    Thread clientThread = new Thread(new ThreadStart(clientObject.EndPoint));
                    clientThread.Start();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (listener != null)
                    listener.Stop();
            }
        }
    }



Код: 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.
public class ClientObject
        {
            public TcpClient client;
            public ClientObject(TcpClient tcpClient)
            {
                client = tcpClient;
            }

            public void Process()
            {
                NetworkStream stream = null;
                try
                {  
                    stream = client.GetStream();
                    byte[] data = new byte[64];
                    while (true)
                    {
                        StringBuilder builder = new StringBuilder();
                        int bytes = 0;
                        do
                        {
                            bytes = stream.Read(data, 0, data.Length);
                            builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                        }
                        while (stream.DataAvailable);

                        string message = builder.ToString();

                        Console.WriteLine(message);
                        message = message.Substring(message.IndexOf(':') + 1).Trim().ToUpper();
                        data = Encoding.Unicode.GetBytes(message);
                        stream.Write(data, 0, data.Length);
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    if (stream != null)
                        stream.Close();
                    if (client != null)
                        client.Close();
                }
            }

        public void EndPoint()
        {
            string MYIpClient;
            try
            {
                MYIpClient = Convert.ToString(((System.Net.IPEndPoint)client.Client.RemoteEndPoint).Address);
                Console.WriteLine(MYIpClient);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (client != null)
                    client.Close();
            }
        }
        }




Клиент:
Код: 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.
 public class Connect
    {
        const int port = XXXX;
        const string address = "XX.XXX.XXX.XX";
        public void Client()
        {
            Console.Write("Введите свое имя:");
            string userName = Console.ReadLine();
            TcpClient client = null;
            try
            {
                client = new TcpClient(address, port);
                NetworkStream stream = client.GetStream();

                while (true)
                {
                    Console.Write(userName + ": ");
                    string message = Console.ReadLine();
                    message = String.Format("{0}: {1}", userName, message);
                    byte[] data = Encoding.Unicode.GetBytes(message);
                    stream.Write(data, 0, data.Length);

                    data = new byte[64];
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0;
                    do
                    {
                        bytes = stream.Read(data, 0, data.Length);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (stream.DataAvailable);

                    message = builder.ToString();
                    Console.WriteLine("Сервер: {0}", message);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                client.Close();
            }
        }
    }
...
Рейтинг: 0 / 0
общение tcp клиентов через tcp сервер C#
    #40080269
IRagnarok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
SignalR


Спасибо. Пойду изучать.

P.S. на таких OpenSourse библиотеках платное приложение не напишешь верно?
...
Рейтинг: 0 / 0
общение tcp клиентов через tcp сервер C#
    #40080310
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ужасный код, ты выложил, если честно.
Нет никакого смысла реализовывать свой прикладной протокол взаимодействия и использоваться чисто транспортный протокол TCP. По сути ты изобретаешь очередной велосипед из говна и палок. При этом он ужасен во всех отношениях.
...
Рейтинг: 0 / 0
общение tcp клиентов через tcp сервер C#
    #40080335
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IRagnarok
P.S. на таких OpenSourse библиотеках платное приложение не напишешь верно?
неверно
...
Рейтинг: 0 / 0
общение tcp клиентов через tcp сервер C#
    #40081038
IRagnarok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

Ну, будем надеяться что в будущем ты научишься читать весь текст целиком. Спасибо за оказанную помощь, твой совет был как никогда полезен, как и ты, между прочем...
...
Рейтинг: 0 / 0
общение tcp клиентов через tcp сервер C#
    #40081194
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IRagnarok,

мне было достаточно глянуть на твой код, можешь обижаться, мне всё равно, я просто обозначил объективную реальность.
тебе это подтвердит любой, на этом форуме. Это не повод считать, что вас облили говном, это повод задуматься, что возможно стоит выбрать другой путь, для решения вашей задачи.
...
Рейтинг: 0 / 0
общение tcp клиентов через tcp сервер C#
    #40081244
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если рожать месяц 100 [кривых] строчек то, возможно, и о другой профессии.
...
Рейтинг: 0 / 0
общение tcp клиентов через tcp сервер C#
    #40081269
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IRagnarok
Мало разбираюсь в пакетах, соединениях, портах и тд. (все знания о таких вещах поверхностны).

углубляй
...
Рейтинг: 0 / 0
общение tcp клиентов через tcp сервер C#
    #40081627
IRagnarok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые школьники!

Прошу вас научиться быть полезными обществу и уже потом давать свои "дельные" советы.
Пусть Shocker.Pro послужит вам примером как соотношение краткости информации к её ценности
Посему на удаляюсь на продолжение изучения SignalR , так как сил на общение с вашим стадным чувством у меня больше нет!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / общение tcp клиентов через tcp сервер C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]