Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Отследить нужную сессию. |
Автор: DFA 10.12.2013, 21:45 |
Извиняюсь, если не в нужный раздел фрума. Пишу на VC6 MFC. Написана программа обмена небольими текстовыми сообщениями. Структура такая: есть сервер, который разруливает потоки сообщений от клиентов, установленных на компы сотрудников офиса, работающих на XP. Построено на сокетах. Я удаленно подключаюсь к другому серверу в офисе, где крутится 1С, по VPN. На нем Win2003 SP2 и клиент для связи по офису. И тут возникает проблема - получаемые мной сюда сообщения приходят, как я понимаю, не в мою сессию и я, естесственно, их не вижу. Как мне направить входящие к себе? |
Автор: feodorv 12.12.2013, 10:56 |
Честно говоря, не понятно. О каких сессиях идёт речь? Сервер Вами написан? А клиент? Правильно ли я понял, что Вы удалённо подключаетесь к компу, на котором установлен клиент для связи по офису, работающий на сокетах; и получаемые сообщения от сервера, который разруливает потоки сообщений от клиентов, Вам не передаются, потому что Вы удалённо подсоединены? |
Автор: DFA 14.12.2013, 21:38 |
Поясню на примере : У сервера сообщений таблица соответствия: Вася ...0.1 Петя ...0.2 Вася подключился удаленно к серверу, который ...0.1, залогинился там, стал ID1, потому что ID0 это основной сеанс. Петя работает за своим компом (...0.2) и видит, что Вася в системе (у него есть список пользователей кому он может отправить сообщение и у имени Вася теперь стоит '+'). Петя отправляет сообщение Васе, сервер пересылает его на ...0.1, но Вася его не получает, хотя сообщение приходит на адрес ...0.1, НО к iD0. Вопрос: есть ли возможность переслать полученное клиентом в ID0 сообщение к ID1? Сервер и клиент написаны мной, возникла одна мысль – поиграть с портами для разных ID, в связи м этим еще один вопрос: Использую. VC6. пытаюсь воспользоваться функцией ProcessIdToSessionId #pragma comment(lib, "kernel32.lib") DWORD pSessionId; DWORD curPID; curPID=GetCurrentProcessId(); BOOL ret=ProcessIdToSessionId(curPID,pSessionId); Не получается. Что не так? |
Автор: Dem_max 15.12.2013, 08:55 | ||
так исправь свой код и посылай на правильный ID |
Автор: DFA 15.12.2013, 12:01 | ||
Используя сокеты, я задаю адрес, но не ID. Адрес-то правильный, ID другой! У меня функцию ProcessIdToSessionId не находит, говорит нет такой, хотя в stdafx.h добавил #define _WIN32_WINNT 0x0500
Что я не так делаю? |
Автор: Dem_max 15.12.2013, 17:21 | ||
Уже избавься от VS6 которая была разработана 20 лет назад. |
Автор: GremlinProg 16.12.2013, 06:40 | ||
|
Автор: GremlinProg 16.12.2013, 15:08 | ||
Если только все сотрудники офиса не сидят удаленно на одной физической машине, связываясь по loopback с сервером и обмениваются между собой сообщениями через что-то вроде WTSSendMessage только для таких целей здесь есть одно лишнее звено: ![]() Добавлено через 2 минуты и 19 секунд хотя, это звено и не мешает работе основной цепочке )) |
Автор: DFA 17.12.2013, 09:58 |
Заработало! Чтобы как-то разделить клиентов на сервере, использую разные порты - клиент загружается, определяет ID (ProcessIdToSessionId) и подключается к своему порту. Всем спасибо за участие! |