![]() |
|
Модераторы: feodorv |
![]()
|
|
| ppoger |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 14.7.2007 Репутация: нет Всего: нет |
Всем привет. Вопрос такой. Есть соединение между 2-мя компами. протокол tcp. сокеты блокирующие. как бы организовать следующее:
//ОТПРАВКА DWORD SendThread1(LPARAM lParam) { SOCKET s = (SOCKET)lParam; send(s,"123",3); return 0; { DWORD SendThread2(LPARAM lParam) { SOCKET s = (SOCKET)lParam; send(s,"12345",5); return 0; { //ПОЛУЧЕНИЕ DWORD RecvThread1(LPARAM lParam) { SOCKET s = (SOCKET)lParam; send(s,buf,3); return 0; { DWORD RevcThread2(LPARAM lParam) { SOCKET s = (SOCKET)lParam; send(s,buf,5); return 0; { Код просто образец того что нужно. Вот как узнать с какого потока пришли данные? к примеру хочу одновременно отправлять и файл, и данные. Надеюсь объяснил понятно |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
Конкретнее, пожалуйста...
|
|||
|
||||
| ppoger |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 14.7.2007 Репутация: нет Всего: нет |
да куда конкретнее........ например один поток отправляет на сокет по 50 байт, второй по 70. как на сервере их правильно принять? не одной же функцией recv, т.к она соберет всю инфу что передали 2 потока. Хотя я начинаю уже думать что это нереально. в том же квипе к примеру для передачи файла создается свой сокет на порт отдельный от передачи сообщений, и одновременно 2 файла отправляться не могут.... Ну в общем мож кто сталкивался?
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
интересно, а как ты их станешь отличать друг от друга эти пакеты по 50 и 70 байт на стадии "разброса по потокам"?
Используй неблокирующие сокеты, или много сокетов. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| ppoger |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 14.7.2007 Репутация: нет Всего: нет |
вот в том то и вопрос, как отличить какой пакет пришел... значит копать в сторону неблокирующих? те ето сокет который переводится функцией select? я просто не отличию синхронных-асинхронных от блокирующих-неблокирующих. Это одно и тоже?
|
|||
|
||||
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: -1 Всего: 1 |
http://forum.vingrad.ru/forum/topic-176373.html
там в предпоследнем сообщении есть ссылка на пример... -------------------- =))))) ![]() |
|||
|
||||
| ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
ppoger, где траву берешь?
Куда переводится?!? Обычно select используют для мультиплексирования.
Они похожи, но не равны. Главное отличие асинхронных сокетов от неблокирующих состоит в уровне обработки событий. С неблокирующими сокетами ты должен следить за всем сам, в ассинхронных же за тебя это делает система.
У тебя свой протокол? Это сообщение отредактировал(а) ptr - 16.10.2007, 12:23 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
| ppoger |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 14.7.2007 Репутация: нет Всего: нет |
prt - большое спасибо за пдф. Буду изучать.
|
|||
|
||||
| ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Да я вообщем-то эту pdf привел просто для примера select'a. В твоём же случае есть несколько возможных вариантов. 1. Можно сделать некоторый протокол, который будет позволять передавать несколько файлов параллельно по одному соединению. Вот только несколько потоков на передачу/прием данных на один сокет лучше не вешать. 2. Можно делать всё последовательно на одном сокете. 3. Можно использовать ещё один сокет. А вот как будет происходить обмен здесь не принципиально. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |