Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / общение tcp клиентов через tcp сервер C# / 11 сообщений из 11, страница 1 из 1
26.06.2021, 00:42
    #40080242
IRagnarok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
общение tcp клиентов через tcp сервер C#
Здравствуйте,

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

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

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

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

Прошу помимо теории хотя бы пару строчек кода приложить, чтобы я мог хоть за что то зацепиться.
Уже месяц мучаюсь мозг кипит !!!!!!!!!!!!!
...
Рейтинг: 0 / 0
26.06.2021, 01:15
    #40080246
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
общение tcp клиентов через tcp сервер C#
SignalR
...
Рейтинг: 0 / 0
26.06.2021, 12:01
    #40080266
IRagnarok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
общение tcp клиентов через tcp сервер C#
На всякий случай выложу мой код:
Сервер:
Код: 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
26.06.2021, 12:07
    #40080269
IRagnarok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
общение tcp клиентов через tcp сервер C#
Shocker.Pro
SignalR


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

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

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

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

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

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


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