р2р tcp core 3.1 - 2 вопроса
От: Barbar1an Украина  
Дата: 03.11.20 17:47
Оценка:
пишу небольшую р2р сеть

1. так как это р2р, то ноды должны асинхронно общаться друг с другом(инициатор может быть на любом конце)
но я не понял как это сделать с одним соединением, писать и читать там конечно можно в оба направления, но как достичь синхронизации не ясно и наврено нереально или я чего-то не знаю (чтобы один не начал писать свой запрос когда другой ждет от него ответ)
поэтому на любое входящее соединеие создаю ответное, это правильно?


2.
этот подход работает локально и по локальной сети, а по инету чето не работает, удаленный узел может подключиться к моей рабочей тачке, а мой к удаленному — не может — почему?
порты проброшены файрволы выключены

CORE 3.1

слушаю так:

Listener = new TcpListener(IPAddress.Any, Port);
Listener.Start();


подключаюсь так:

var client = new TcpClient(); // вопрос 2а: есть такой конструктор - new TcpClient(addr) - который выглядит бесполезным потому что никуда не конктится и вообще не соотв-ет документации - что это за хрень?
client.Connect(addr);
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 03.11.2020 17:53 Barbar1an . Предыдущая версия . Еще …
Отредактировано 03.11.2020 17:51 Barbar1an . Предыдущая версия .
Отредактировано 03.11.2020 17:49 Barbar1an . Предыдущая версия .
Отредактировано 03.11.2020 17:48 Barbar1an . Предыдущая версия .
Re: р2р tcp core 3.1 - 2 вопроса
От: reversecode google
Дата: 03.11.20 17:56
Оценка:
p2p tcp ?
это что то новое

насчет бинда, может лучше гуглить и читать документацию?
коннекта куда еще нет
это бинд на локальный адрес с которого потом пойдет коннект
без бинда будет адрес на выбор системы
https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient.-ctor?view=netcore-3.1#System_Net_Sockets_TcpClient__ctor_System_Net_IPEndPoint_
Re[2]: р2р tcp core 3.1 - 2 вопроса
От: Barbar1an Украина  
Дата: 03.11.20 18:01
Оценка:
Здравствуйте, reversecode, Вы писали:

R>p2p tcp ?

R>это что то новое

а че?)

R>насчет бинда, может лучше гуглить и читать документацию?

R>коннекта куда еще нет
R>это бинд на локальный адрес с которого потом пойдет коннект
R>без бинда будет адрес на выбор системы
R>https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient.-ctor?view=netcore-3.1#System_Net_Sockets_TcpClient__ctor_System_Net_IPEndPoint_

а блин, это локальный адресс был, понял)))
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: р2р tcp core 3.1 - 2 вопроса
От: Danchik Украина  
Дата: 03.11.20 18:08
Оценка: 12 (1)
Здравствуйте, Barbar1an, Вы писали:

[Skip]

B>CORE 3.1


B>слушаю так:


B>
Listener = new TcpListener(IPAddress.Any, Port);
B>Listener.Start();
B>


B>подключаюсь так:


B>
var client = new TcpClient(); // вопрос 2а: есть такой конструктор - new TcpClient(addr) - который выглядит бесполезным потому что никуда не конктится и вообще не соотв-ет документации - что это за хрень?
B>client.Connect(addr);
B>


Так если интерсно, нашел выдранный сокет сервер из Kestrel — самая быстрая реализация на пайпах
https://github.com/dotnet/orleans/tree/master/src/Orleans.Core/Networking/Shared

Также можете попробовать https://github.com/AArnott/Nerdbank.Streams — по ходу уже сделанные протоколы с асинхрощиной.
Re: р2р tcp core 3.1 - 2 вопроса
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.11.20 18:19
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>1. так как это р2р, то ноды должны асинхронно общаться друг с другом(инициатор может быть на любом конце)

B>но я не понял как это сделать с одним соединением, писать и читать там конечно можно в оба направления, но как достичь синхронизации не ясно и наврено нереально или я чего-то не знаю (чтобы один не начал писать свой запрос когда другой ждет от него ответ)
B>поэтому на любое входящее соединеие создаю ответное, это правильно?

Я бы делал наоборот: ограничивался одним соединением и специально отсекал бы случаи, когда оба узла одновременно захотели друг друга, и в результате получилось два соединения.

B>этот подход работает локально и по локальной сети, а по инету чето не работает, удаленный узел может подключиться к моей рабочей тачке, а мой к удаленному — не может — почему?

B>порты проброшены файрволы выключены

Да кто знает-то? Открой для себя Wireshark, и научись им пользоваться. Без этого умения серьезную сетевую программу не написать.
Re[2]: р2р tcp core 3.1 - 2 вопроса
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.11.20 18:21
Оценка:
Здравствуйте, reversecode, Вы писали:

R>p2p tcp ?

R>это что то новое

Да пусть себе. Нормальный p2p он так, конечно, не сделает, но может хоть научится на сокетах программировать...
Re[3]: р2р tcp core 3.1 - 2 вопроса
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.11.20 18:22
Оценка: 6 (1)
Здравствуйте, Barbar1an, Вы писали:

R>>p2p tcp ?

R>>это что то новое

B>а че?)


Потому, что если твой p2p работает только при условии, что пользователь выключил NAT и firewall, то он никому не нужен.
Re[4]: р2р tcp core 3.1 - 2 вопроса
От: Barbar1an Украина  
Дата: 03.11.20 18:29
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Потому, что если твой p2p работает только при условии, что пользователь выключил NAT и firewall, то он никому не нужен.


нууууу вроде например торрнет и биткоин работают по tcp и ниче, не знаю как школота НАТы пробрасывает но както похоже пробрасывает, и не выключает, зачем выключать?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 03.11.2020 18:32 Barbar1an . Предыдущая версия .
Re[2]: р2р tcp core 3.1 - 2 вопроса
От: Barbar1an Украина  
Дата: 03.11.20 18:31
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Я бы делал наоборот: ограничивался одним соединением и специально отсекал бы случаи, когда оба узла одновременно захотели друг друга, и в результате получилось два соединения.


ну а как я с таким подходом сделаю обмен с инициаторами на обоих концах? даже в теории я не вижу такого механизма синхронизации, потому что в сети ничего атомарного не бывает
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: р2р tcp core 3.1 - 2 вопроса
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.11.20 18:36
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>ну а как я с таким подходом сделаю обмен с инициаторами на обоих концах? даже в теории я не вижу такого механизма синхронизации, потому что в сети ничего атомарного не бывает


Значит, тебе придется изобрести алкогоритм, который в конечном итоге будет приходить в это состояние.

P.S. Когда я занимался подобными вещами, у меня узлы на камень-ножницы решали, кто из них главный в этой паре, и побеждало соединение, инициированное главным узлом.
Re[5]: р2р tcp core 3.1 - 2 вопроса
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.11.20 18:37
Оценка:
Здравствуйте, Barbar1an, Вы писали:

Pzz>>Потому, что если твой p2p работает только при условии, что пользователь выключил NAT и firewall, то он никому не нужен.


B>нууууу вроде например торрнет и биткоин работают по tcp и ниче, не знаю как школота НАТы пробрасывает но както похоже пробрасывает, и не выключает, зачем выключать?


Ну так разбирись сначала.
Re[4]: р2р tcp core 3.1 - 2 вопроса
От: Barbar1an Украина  
Дата: 09.11.20 16:15
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>P.S. Когда я занимался подобными вещами, у меня узлы на камень-ножницы решали, кто из них главный в этой паре, и побеждало соединение, инициированное главным узлом.


опять не поняли
представьте что у вас на каждом конце и вебсервер и браузер, вот это и есть наш р2р

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

впрочем почесав аллопецию я понял что эта проблема имеет простое решение — обязательная очередность.
т.е. каждый узел может отправлять запрос только после того как обработает входящий, т.е. иницирируют короткие сессии они сторого по очереди,
1 пишет 2 отвечает
2 пишет 1 отвечает
1 пишет 2 отвечает
...

если узлу отправлять нечего то он отправляет пустой пакет
соотв-но если узлам вообще нечем обмениваться то они просто лениво спериодом типа 10 сек перекидыются пустыми пакетами

вот и всё,
а вы тут развели, читай книжки, наты, только удп только хардкор и прочее, хотя все равно спасибо это уже не первый раз когда куча народу ничем толком мне не помогает но както всё равно наталкивает на нужные идеи
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 09.11.2020 16:18 Barbar1an . Предыдущая версия . Еще …
Отредактировано 09.11.2020 16:17 Barbar1an . Предыдущая версия .
Re[5]: р2р tcp core 3.1 - 2 вопроса
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.11.20 19:16
Оценка: +1
Здравствуйте, Barbar1an, Вы писали:

B>решить кто главный не проблема, проблема когда у вас на двух концах происходят непредсказуемые события и вам нада передавать их в режиме запрос-ответ, а каналов записи и чтения у вас по 1 шт


Ну и кто мешает поток независимых сообщений гнать в обе стороны по одному TCP-соединению?

B>вот и всё,

B>а вы тут развели, читай книжки, наты, только удп только хардкор и прочее, хотя все равно спасибо это уже не первый раз когда куча народу ничем толком мне не помогает но както всё равно наталкивает на нужные идеи

Когда человек ничего незнает, ему нередко кажется, что вокруг одни идиоты. Потом это проходит. Но не у всех.
Re[6]: р2р tcp core 3.1 - 2 вопроса
От: Barbar1an Украина  
Дата: 09.11.20 19:34
Оценка:
Здравствуйте, Pzz, Вы писали:


Pzz>Ну и кто мешает поток независимых сообщений гнать в обе стороны по одному TCP-соединению?


в режиме запрос-ответ
в режиме запрос-ответ
в режиме запрос-ответ

можно конечно там организовать очереди пакетов, всем запросам давать идентификаторы, блокировать потоки в ожидании прихода нужного ответа, но зачем тогда tcp? такое и на udp можно сделать
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 09.11.2020 20:14 Barbar1an . Предыдущая версия .
Re[7]: р2р tcp core 3.1 - 2 вопроса
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.11.20 20:25
Оценка:
Здравствуйте, Barbar1an, Вы писали:

Pzz>>Ну и кто мешает поток независимых сообщений гнать в обе стороны по одному TCP-соединению?


B>в режиме запрос-ответ

B>в режиме запрос-ответ
B>в режиме запрос-ответ

Ну и сведи запросы с ответами, какая проблема?

B>можно конечно там организовать очереди пакетов, всем запросам давать идентификаторы, блокировать потоки в ожидании прихода нужного ответа, но зачем тогда tcp? такое и на udp можно сделать


Затем, что tcp еще делает flow control и retransmit. Это в разы сложнее того, что ты перечислил.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.