crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V  < 1 2 3 4 >  
Ответить в данную темуНачать новую тему
> Получение и обработка пакетов TCP/IP
Iron Bug
  опции профиля:
сообщение 12.1.2011, 20:06
Сообщение #11


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(Влад @ 12.1.2011, 14:34) *
Во-первых, в протоколе 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  


Цитата(RazrFalcon @ 12.1.2011, 18:14) *
Грубо говоря:
есть мой комп + устройство. у каждого static ip, как им общаться?

Вообще говоря создаешь QTcpSocket, и вызываешь connectToHost( <ip-адрес устройства> , <номер порта> ).
Далее нужно смотреть, что говорят спецификации :rolleyes: этого устройства : сразу ли оно начинает данные тебе передавать или надо его как-то опросить...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 13.1.2011, 12:59
Сообщение #14


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Цитата(xls @ 13.1.2011, 11:43) *
Вообще говоря создаешь QTcpSocket, и вызываешь connectToHost( <ip-адрес устройства> , <номер порта> ).
Далее нужно смотреть, что говорят спецификации :rolleyes: этого устройства : сразу ли оно начинает данные тебе передавать или надо его как-то опросить...

Спасибо, буду разбираться.

to Влад vs Iron Bug ;)
Я имел ввиду то что будет предаваться: пакет/сегмент/сообщение, что угодно. Одним словом то, где будут находится мои данные.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 13.1.2011, 19:31
Сообщение #15


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Очень нубский вопрос по теме:

в примере fortune server , в самом начале есть строка
Server::Server(QWidget *parent)
:   QDialog(parent), tcpServer(0), networkSession(0)
Без tcpServer(0), networkSession(0) не работает.
Как такое реализовать в консольном приложении. Или может есть пример клиента/сервера в консольном варианте?
Мне нужно перевести fortune server/client в консольный вариант, а потом уже разбираться. Так как в примере мне вообще мало что понятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 14.1.2011, 9:24
Сообщение #16


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Цитата(RazrFalcon @ 13.1.2011, 21:31) *
Очень нубский вопрос по теме:


Очень нубский ответ в атаче. Сервер, который слушает на 23(telnet) порту подключения, после подключения сообщает подключившемуся порт (на стороне сервера 23, а на стороне клиента произвольный из незарезервированных). При принятии сообщения от клиента отправляет ему его назад.

Пример может быть с ошибками, так как сам профан в этом всем.

Консольный сервер... в консоль ничего, кроме номера порта и своей готовности не пишет. Клиенту отвечает тем, же что получил от него. Не забудь разрешить в firewall'е

Сообщение отредактировал silver47 - 14.1.2011, 9:58
Прикрепленные файлы
Прикрепленный файл  123.ZIP ( 1,84 килобайт ) Кол-во скачиваний: 88
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Влад
  опции профиля:
сообщение 14.1.2011, 18:05
Сообщение #17


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

Спасибо сказали: 46 раз(а)




Репутация:   8  


Цитата(RazrFalcon @ 13.1.2011, 12:59) *
Я имел ввиду то что будет предаваться: пакет/сегмент/сообщение, что угодно. Одним словом то, где будут находится мои данные.

Ну хорошо, вот тривиальный пример:
Предположим, ты успешно установил соединение по протоколу 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  


Без понятия :lol:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.1.2011, 18:21
Сообщение #19


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Влад @ 14.1.2011, 20:05) *
Устройство посылает компу два "пакета" - в первом записано, например, "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  


Цитата(Алексей1153 @ 14.1.2011, 20:21) *
Цитата(Влад @ 14.1.2011, 20:05) *
Устройство посылает компу два "пакета" - в первом записано, например, "Hello, remote computer!", а во втором - "Good bye!". Как ты думаешь, что ты примешь на приемном конце (на компьютере), читая пришедшие данные функцией QTcpSocket.read(), за первый, второй, третий и т.д. вызовы?


при чтении получится один из следующих вариантов:

1) пусто
2) кусок от первого сообщения
3) первое сообщение целиком
4) 3+ кусок второго сообщения
5) всё скопом


:)



Как Этого избежать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V  < 1 2 3 4 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


10 чел. читают эту тему (гостей: 10, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.1.2025, 1:51