Получение и обработка пакетов TCP/IP |
Здравствуйте, гость ( Вход | Регистрация )
Получение и обработка пакетов TCP/IP |
Iron Bug |
12.1.2011, 20:06
Сообщение
#11
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Во-первых, в протоколе TCP нет вообще понятия "пакет". это не так. это только с одной стороны он - поток. а с другой он железяка, всё-таки для программиста где-то наверху, конечно, пофиг. но вот пакет, и заголовок у TCP есть. можно его называть сегментом, куском, или чем угодно. физически, на уровне приёма-передачи и стека, это реализовано именно как пакет: данные и заголовок. а сверху ещё и IP пакет накручивается - чтобы всё это доставить куда нужно. другое дело, что наверху склейки пакетов не видно и там можно как угодно данные фасовать. |
|
|
Влад |
13.1.2011, 10:39
Сообщение
#12
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
О! Вот если назвать "сегментом", то я соглашусь совершенно. С "пакетом" - все-таки нет. Впрочем, это уже наши (Влад vs Iron Bug) терминологические разногласия.....
Хотя, я не уверен, что ТС имел в виду под "пакетами" именно сегменты. Скорее, мне представляется, имелись в виду "сообщения" логического прикладного протокола верхнего уровня... Ясность тут может внести только сам ТС. |
|
|
xls |
13.1.2011, 12:43
Сообщение
#13
|
Студент Группа: Участник Сообщений: 44 Регистрация: 6.9.2010 Пользователь №: 2013 Спасибо сказали: 7 раз(а) Репутация: 2 |
Грубо говоря: есть мой комп + устройство. у каждого static ip, как им общаться? Вообще говоря создаешь QTcpSocket, и вызываешь connectToHost( <ip-адрес устройства> , <номер порта> ). Далее нужно смотреть, что говорят спецификации этого устройства : сразу ли оно начинает данные тебе передавать или надо его как-то опросить... |
|
|
RazrFalcon |
13.1.2011, 12:59
Сообщение
#14
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Вообще говоря создаешь QTcpSocket, и вызываешь connectToHost( <ip-адрес устройства> , <номер порта> ). Далее нужно смотреть, что говорят спецификации этого устройства : сразу ли оно начинает данные тебе передавать или надо его как-то опросить... Спасибо, буду разбираться. to Влад vs Iron Bug Я имел ввиду то что будет предаваться: пакет/сегмент/сообщение, что угодно. Одним словом то, где будут находится мои данные. |
|
|
RazrFalcon |
13.1.2011, 19:31
Сообщение
#15
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Очень нубский вопрос по теме:
в примере fortune server , в самом начале есть строка Без tcpServer(0), networkSession(0) не работает. Как такое реализовать в консольном приложении. Или может есть пример клиента/сервера в консольном варианте? Мне нужно перевести fortune server/client в консольный вариант, а потом уже разбираться. Так как в примере мне вообще мало что понятно. |
|
|
silver47 |
14.1.2011, 9:24
Сообщение
#16
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Очень нубский вопрос по теме: Очень нубский ответ в атаче. Сервер, который слушает на 23(telnet) порту подключения, после подключения сообщает подключившемуся порт (на стороне сервера 23, а на стороне клиента произвольный из незарезервированных). При принятии сообщения от клиента отправляет ему его назад. Пример может быть с ошибками, так как сам профан в этом всем. Консольный сервер... в консоль ничего, кроме номера порта и своей готовности не пишет. Клиенту отвечает тем, же что получил от него. Не забудь разрешить в firewall'е Сообщение отредактировал silver47 - 14.1.2011, 9:58
Прикрепленные файлы
|
|
|
Влад |
14.1.2011, 18:05
Сообщение
#17
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
Я имел ввиду то что будет предаваться: пакет/сегмент/сообщение, что угодно. Одним словом то, где будут находится мои данные. Ну хорошо, вот тривиальный пример: Предположим, ты успешно установил соединение по протоколу TCP/IP с удаленным устройством ("железкой"). Устройство посылает компу два "пакета" - в первом записано, например, "Hello, remote computer!", а во втором - "Good bye!". Как ты думаешь, что ты примешь на приемном конце (на компьютере), читая пришедшие данные функцией QTcpSocket.read(), за первый, второй, третий и т.д. вызовы? |
|
|
RazrFalcon |
14.1.2011, 18:10
Сообщение
#18
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Без понятия
|
|
|
Алексей1153 |
14.1.2011, 18:21
Сообщение
#19
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Устройство посылает компу два "пакета" - в первом записано, например, "Hello, remote computer!", а во втором - "Good bye!". Как ты думаешь, что ты примешь на приемном конце (на компьютере), читая пришедшие данные функцией QTcpSocket.read(), за первый, второй, третий и т.д. вызовы? при чтении получится один из следующих вариантов: 1) пусто 2) кусок от первого сообщения 3) первое сообщение целиком 4) 3+ кусок второго сообщения 5) всё скопом |
|
|
silver47 |
14.1.2011, 18:55
Сообщение
#20
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
Устройство посылает компу два "пакета" - в первом записано, например, "Hello, remote computer!", а во втором - "Good bye!". Как ты думаешь, что ты примешь на приемном конце (на компьютере), читая пришедшие данные функцией QTcpSocket.read(), за первый, второй, третий и т.д. вызовы? при чтении получится один из следующих вариантов: 1) пусто 2) кусок от первого сообщения 3) первое сообщение целиком 4) 3+ кусок второго сообщения 5) всё скопом Как Этого избежать? |
|
|
Текстовая версия | Сейчас: 16.1.2025, 0:42 |