Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TCP-передача структуры данных 
:(
    Опции темы
gordmiand
Дата 27.8.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Допустим есть структура
Код

struct Mystr
{
int pole1;
float pole2;
char  pole3;
} exz_struct;


exz_struct.pole1=11;
exz_struct.pole2=5.77;
exz_struct.pole3=”a”;

Подскажите пож-та программно smile  как мне наипростейшим способом из программы-сервера передать указанную выше структуру данных по TCP/IP – протоколу, а в программе-клиенте – принять эту информацию, вывести ее на экран и послать какой-либо ответ (например просто “1”) на сервер???
Почитал в Qt-книге  про класс QTcpSocket, но что-то я совсем в этих сетях заплутал…
помогите пож-та – очень буду благодарен…..

PM MAIL   Вверх
Abyx
Дата 27.8.2010, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



socket() connect() send()
socket() bind() listen() accept() recv()

гуглите эти функции.
PM MAIL   Вверх
gordmiand
Дата 27.8.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Abyx: дя я не только по гуглу смотрел эти функции, но и по книге, но все равно толком не разобрался - в сетях только-только начинаю делать первые шаги....накидайте хотя бы  приблизительный наипростейший примерчик для отсылки-приема указанной выше структуры данных - я буду очень обязан Вам...мне это в Qt надо сделать - я так понимаю с использованием класса QTcpSocket???
PM MAIL   Вверх
djamshud
Дата 27.8.2010, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: нет
Всего: 39



http://www.hiraeth.com/alan/tutorials/tcpi...IP-complete.pdf

Вкратце. Но в идеале нужно читать Стивенса "Unix Network Programming". После этого можно писать хоть на Qt, хоть на дотнете.

Добавлено через 3 минуты и 47 секунд
К тому же, насколько я знаю, большая часть сетевой инфраструктуры винды была честно взята из FreeBSD. И комментарий Abyx , который виндузятник, это частично подтверждает: перечисленные им функции - часть POSIX и BSD.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
gordmiand
Дата 27.8.2010, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



djamshud: 
во-первых Ваша ссылка выдает "404 File not found"
во-вторых - мне надо под винду написать такой обмен, у меня есть такая рабочая программа, но под линуксом - в ней используются файлы sys/socket.h, sys/ioctl.h и arpa/inet.h, которых нет в винде…на какие виндовые файлы-аналоги мне можно заменить указанные выше файлы или как быть вообще? 

PM MAIL   Вверх
djamshud
Дата 27.8.2010, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: нет
Всего: 39



http://www.hiraeth.com/alan/tutorials/tcpip/tcpip.html

Попробуйте эту. Там ссылка на pdf. Если не откроется, проблема в ваших интернетах.

>на какие виндовые файлы-аналоги мне можно заменить указанные выше файлы или как быть вообще?

Abyx перечислил вам названия функций, почему бы не обратиться к документации msdn?

Добавлено через 35 секунд
Но у вас вообще нет понимания сетей, поэтому нужно читать Стивенса.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Abyx
Дата 27.8.2010, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



А вообще по хорошему надо использовать boost.asio .
Но вы его не осилите.
PM MAIL   Вверх
SVN74
Дата 27.8.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Для Вас лучший вариант -  "Самоучитель игры на WINSOCK"
http://citforum.ru/book/cook/winsock.shtml
PM MAIL WWW   Вверх
gordmiand
Дата 27.8.2010, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



djamshud: у меня в линукс-проге тоже используются все функциии, перечисленные Abyx-ом выше - просто я не могу разобраться с этими 3 файлами из системной include-папки линукса...должны же быть их аналоги и в винде... 
PM MAIL   Вверх
djamshud
Дата 27.8.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: нет
Всего: 39



gordmiand, google: msdn connect -> http://msdn.microsoft.com/en-us/library/ms...28VS.85%29.aspx
Это документация. Там даже пример есть. Неужели так сложно?


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
gordmiand
Дата 27.8.2010, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



djamshud  smile ...а сложно подправить имеющуюся у меня линукс-прогу под винды, учитывая, что в первой используются естес-но все теже функции connect, bind  и т.д.? вся загвоздка в этих 3 линукс-инклудниках smile .... 


Это сообщение отредактировал(а) gordmiand - 27.8.2010, 22:50
PM MAIL   Вверх
djamshud
Дата 27.8.2010, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: нет
Всего: 39



gordmiand, думайте.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
gordmiand
Дата 27.8.2010, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



 smile 
djamshud: а если я Вам покажу файлы проги - Вы сможете мне более предметно помочь? ведь знающему человеку это одна (две) минута smile ... 
PM MAIL   Вверх
Abyx
Дата 28.8.2010, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



gordmiand, вам надо в центр помощи.
PM MAIL   Вверх
boostcoder
Дата 28.8.2010, 03:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата

А вообще по хорошему надо использовать boost.asio

ессно! это единственное перспективное направление.

вот. даже проверил smile 
Код

#include <boost/asio.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <iostream>
#include <fstream>

/***************************************************************************/

struct Mystr {
   int pole1;
   float pole2;
   char  pole3;
};

/***************************************************************************/

namespace boost { namespace serialization {

template<typename archive_t>
void serialize(archive_t& ar, Mystr& o, unsigned int) {
   ar & o.pole1
      & o.pole2
      & o.pole3;
}

} }

/***************************************************************************/

int main() {
using boost::asio::ip::tcp;

   const char* ip = "127.0.0.1";
   const char* port = "3400";
   
   Mystr str = {33, 3, '6'};
   try {
      std::stringstream ss;
      { boost::archive::binary_oarchive(ss) << str; }

      boost::asio::io_service ios;
      tcp::socket sock(ios);

      boost::system::error_code error = boost::asio::error::host_not_found;
      sock.connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address_v4::from_string(ip), port), error);
      { (error) ? throw boost::system::system_error(error) : 0; }

      boost::asio::write(sock, boost::asio::buffer(ss.str()),
         boost::asio::transfer_all(), error
      );
   } catch (const boost::system::system_error& e) {
      std::cout << "(std::exception): " << e.what() << std::endl;
      return 1;
   }

   return 0;
}

/***************************************************************************/



Это сообщение отредактировал(а) boostcoder - 29.8.2010, 18:44
PM WWW   Вверх
Abyx
Дата 28.8.2010, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



boostcoder, что-то кода у вас многовато. и сервера нет.

PM MAIL   Вверх
boostcoder
Дата 28.8.2010, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(Abyx @  28.8.2010,  10:47 Найти цитируемый пост)
что-то кода у вас многовато

покажите что лишнее.

Цитата(Abyx @  28.8.2010,  10:47 Найти цитируемый пост)
и сервера нет

сервер есть. но я его не стал выкладывать. пусть ТС хоть над чем-то подумает smile 
PM WWW   Вверх
Abyx
Дата 28.8.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



1. POD-типы без полей-указателей можно передавать как есть. Алсо ТС не спрашивал как сериализовать структуру.
2. Если вы коннектитесь по IP, то резолвить ничего не надо.
3. tmperr не нужна.
PM MAIL   Вверх
boostcoder
Дата 28.8.2010, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(Abyx @  28.8.2010,  16:04 Найти цитируемый пост)
1. POD-типы без полей-указателей можно передавать как есть.

это ИМХО. я ни ТС. и не позволил бы себе "так" написать.

Цитата(Abyx @  28.8.2010,  16:04 Найти цитируемый пост)
2. Если вы коннектитесь по IP, то резолвить ничего не надо.

пример?

Цитата(Abyx @  28.8.2010,  16:04 Найти цитируемый пост)
3. tmperr не нужна. 

ну да.
PM WWW   Вверх
Abyx
Дата 28.8.2010, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



Цитата(boostcoder @  28.8.2010,  17:10 Найти цитируемый пост)
пример?

socket.connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address_v4::from_string(ip), port));

PM MAIL   Вверх
boostcoder
Дата 28.8.2010, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



спасибо smile 
PM WWW   Вверх
gordmiand
Дата 29.8.2010, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Abyx: а где здесь центр помощи?...что-то никак не найду его....
PM MAIL   Вверх
boostcoder
Дата 29.8.2010, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 13
Всего: 110



Цитата(gordmiand @  29.8.2010,  18:16 Найти цитируемый пост)
а где здесь центр помощи?

а зачем тебе? половину кода тебе бесплатно написали smile

Добавлено через 23 секунды
напиши кому-нибудь из этой темы в личку.
PM WWW   Вверх
Abyx
Дата 29.8.2010, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



Цитата(boostcoder @  29.8.2010,  19:38 Найти цитируемый пост)
напиши кому-нибудь из этой темы в личку.

и бюджет сразу напишите.
PM MAIL   Вверх
gordmiand
Дата 29.8.2010, 21:24 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Abyx: бюджет? а как же бескорыстная взаимопомощь, оказываемая на данном форуме? сегодня ты мне помог, а завтра - я тебе.... smile 
PM MAIL   Вверх
Addidas
Дата 6.10.2010, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 20.8.2007

Репутация: нет
Всего: нет



Думаю товарищу Abyx помощь может не понадобится..  smile 
PM MAIL   Вверх
bigbuka
Дата 6.10.2010, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



как по мне так простой memcpy в массив unsigned char
потом обычными сокетами передать все это дело 
и на клиентской стороне тотже memcpy в структуру
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1050 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.