С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Веб-сервисы и WCF
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 24.05.2019
Сообщений: 7
1

Создание p2p подключения

04.05.2023, 10:30. Показов 1132. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, пишу программу для дипломной работы в виде клиент-сервера для обмена файлами с подписями. При отправке файла одним пользователем другому должно подниматься п2п - отправитель запускает на своей стороне хост и ждет подключения принимающего. При запуске клиента на компьютере с запущенным сервером и отправке файлов клиенту на другом устройстве все отрабатывает как надо. Но в обратном направлении принимателю не получается даже подключиться. Пробовал различным образом отправлять айпишники: RemoteEndPoint отправителя со стороны сервера обоим пользователям, LocalEndPoint на стороне отправителя через сервер принимающему, нулевой адрес из AddressList отправителя через сервер получателю. В первом случае, если не ошибаюсь, выдавало "сделана попытка выполнить операцию на сокете при отключенной сети". В остальных случаях принимающему просто не получалось подключиться.
Код для отправителя:
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
SignFunc();
_serverSocket.Send(Encoding.UTF8.GetBytes("/p2p/eom"));
SendAccept();//Подтверждение получения и обработки команды /p2p/eom
IPEndPoint ipEndPoint = new IPEndPoint(p2pAddress, 8080);
Socket socket = new Socket(p2pAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);//p2pAddress принимается в отдельном потоке обработчиком от сервера после обработки команды
socket.Bind(ipEndPoint);
socket.Listen(1000);
_serverSocket.Send(Encoding.UTF8.GetBytes(rec_name.Text));//rec_name - логин получателя
SendAccept();
rec_user = socket.Accept();
byte[] buffer = new byte[8192];
int bytesRec = rec_user.Receive(buffer);
string data = Encoding.UTF8.GetString(buffer, 0, bytesRec);
 
if (data.Contains("/ok"))
{
    rec_user.Send(Encoding.UTF8.GetBytes(userName.Text));
    rec_user.Receive(buffer);
    Thread p2p_thread = new Thread(p2p_listener);
    p2p_thread.IsBackground = true;
    p2p_thread.Start();
    SendSign(rec_user);
    p2p_thread.Abort();
}
 
socket.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
if (data.Equals("/p2p"))
{
    bytesRec = _serverSocket.Receive(buffer);
    data = Encoding.UTF8.GetString(buffer, 0, bytesRec);
    IPAddress ipAddress = IPAddress.Parse(data);//тот же адрес, что получил отправитель
    IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 8080);
    Socket p2phost = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
    p2phost.Connect(ipEndPoint);//тут вылезает ошибка
    DialogResult dialogResult = MessageBox.Show("Принять файл от пользователя?", "", MessageBoxButtons.YesNo);
 
    if (dialogResult == DialogResult.Yes)
    {
        bytesSent = p2phost.Send(Encoding.UTF8.GetBytes("/ok"));
        bytesRec = p2phost.Receive(buffer);
        string p2p_name = Encoding.UTF8.GetString(buffer, 0, bytesRec);
        bytesSent = p2phost.Send(Encoding.UTF8.GetBytes("/ok"));
        bytesRec = p2phost.Receive(buffer);
        GetFile(p2phost);
        bytesRec = p2phost.Receive(buffer);
        GetFile(p2phost);
        ApproveFunc(p2p_name, p2pfile_name);
     }
     else
     {
         bytesSent = p2phost.Send(Encoding.UTF8.GetBytes("/rej"));
     }
 
     p2phost.Close();
}
Выше код для первого случая. Получаемые адреса в отладчике проверял - там все сходится. В остальных случаях адреса тоже были одни и те же
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2023, 10:30
Ответы с готовыми решениями:

Создание чата по принципу P2P с функцией сквозного шифрования
Здравствуйте! как можно реализовать такой алгоритм на C# или C++? может есть какие статьи и...

Создание p2p чата для частной локальной сети
Добрый день. Задача: Существует необходимость создать p2p час для нескольких клиентов внутри...

Создание локальной БД. Создание класса для работы с БД. Ошибка подключения к БД
Доброго времени суток! Нужно создать БД и создать класс для работы с ним - методы: добавление,...

OpenVPN конфиг для P2P подключения
Хочу настроить сеть между 2мя машинами за разными NATами. Но немогу въехать как правильно впихнуть...

0
04.05.2023, 10:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2023, 10:30
Помогаю со студенческими работами здесь

Создание P2P клиента. Определение IP
Доброго времени суток. Хочу создать P2P-клиент для распределенных вычислений. Версия для локальной...

P2P шара, или P2P облако
Подскажите, существует ли на сегодняшний день возможность предоставлять доступ к файлам/папкам по...

Создание подключения
Доброе время суток! Есть алгоритм который вычитывает информацию с устройства и записывает в базу...

Создание VPN подключения
Всем привет! Собственно вопрос о создание VPN подключения на PureBasic Может кто нибудь помочь?...

Создание входящего подключения
Подскажите пожалуйста, возможно ли реализовать вот такой сервер vpn через cmd?...

Создание удаленного подключения
Интересует только 2 задача. Прикладываю все задание на всякий случай. Прикладываю саму сеть(lab2)....

Создание Интернет-подключения.
Недавно установила себе Linux ubunta, но для создания Интернет-подключения необходимо установить...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru