![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Norrius |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Добрый день, уважаемые. После нескольких тестов и вдумчивого чтения документации я выяснил, что TCP буферизует данные, а открыть сокет в режиме Unbuffered нельзя.
Кроме того, мои данные делятся на две категории: большой пакет до нескольких метров в начале и при смене настроек сервера и беспрестанно посылающиеся маленькие пакеты, которые, в идеале, должны приходить сразу же, как только отправлены. Для первого я оставил TCP, так что серверу нужно держать соединение по обоим протоколам. Информация будет пересылаться в обе стороны. Для TCP есть класс QTcpServer, предоставляющий функционал для работы со многими клиентами, но может ли такое сделать на протоколе UDP, который, как я понял, не оперирует соедиениями? UPD. Все это бред, удалось заставить TCP сокет передавать данные нормально. Сообщение отредактировал Norrius - 25.8.2012, 12:22 |
|
|
PAFOS |
![]()
Сообщение
#2
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: ![]() ![]() ![]() |
да, это так если, но если отключить алгоритм Нагла (Nagle algorithm). То данные будут отправлять сразу же ) предугадывая вопрос "Как это сделать?" отвечаю:
Имей ввиду, что UDP не гарантирует 100% доставку пакета + его правильность. т.е. если клиент послал 1,2,3 то к серверу может придти 2,1,3 а может придти только 2,1 или вообще только 3) |
|
|
Norrius |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо. Мне действительно на самом деле не сдался UDP с его unreliable доставкой) Просто в данной местности интернет очень хреновый, и доступна мне только встроенная документация.
|
|
|
Norrius |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Хм, а где находятся необходимые объявления? Нагугленных netinet/in.h, netinet/tcp.h, или даже sys/socket.h на этом компьютере не оказалось.
|
|
|
PAFOS |
![]()
Сообщение
#5
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: ![]() ![]() ![]() |
Для винды надо подключать winsock.h
|
|
|
Norrius |
![]()
Сообщение
#6
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ругается на некое 'HANDLE', сильно ругается...
|
|
|
Iron Bug |
![]()
Сообщение
#7
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Norrius |
![]()
Сообщение
#8
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
#include <Windows.h> не помогает, все равно:
|
|
|
Iron Bug |
![]()
Сообщение
#9
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
reference to 'HANDLE' is ambiguous это значит, что он в двух заголовочниках каким-то образом определён стал. в стандартных заголовочниках такого быть не может. где-то косяк с define'ами или c макросами. смотри те места в заголовках, куда компилятор указывает на противоречащие определения. скорее всего, это неправильные макросы препроцессора или что-то в этом духе. для венды HANDLE определён как void*, в WinNT.h (который включен в Windows.h). остальное - ересь. Сообщение отредактировал Iron Bug - 24.8.2012, 8:43 |
|
|
Алексей1153 |
![]()
Сообщение
#10
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
можно передавать исходное сообщение пакетами, скажем, по 2048 байтов. Тогда не будет ожидания доставки всего сообщения, только в приёмнике нужно будет собирать сообщение, учитывая свой протокол. Зато это можно сделать в отдельном потоке
|
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 9.12.2023, 4:57 |