Сокеты и int
От: Аноним  
Дата: 08.09.06 05:41
Оценка:
Возникла такая проблема. Есть сокет (AF_INET). через функцию send(), как я понял, можно посылать только строки. А как переслать число? Программа, в принципе, простая. Сервер считает количество записей в файле и должен переслать его (число записей) клиенту. А клиент уже потом от этого работать начинает. Вроде проблема небольшая, я как сделать — ХЗ
Re: Сокеты и int
От: c-smile Канада http://terrainformatica.com
Дата: 08.09.06 05:49
Оценка: :))
Здравствуйте, Аноним, Вы писали:

А>...через функцию send(), как я понял, можно посылать только строки. ...


Теперь я знаю о чем думают анонимы когда видят следующее:

ssize_t send(int s, const void *msgbuf, size_t len, int flags);


Колись, что тебя подвигнуло на так понять это?

http://tautology.org/software/man/send
Re[2]: Сокеты и int
От: Аноним  
Дата: 08.09.06 06:07
Оценка: :)
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, Аноним, Вы писали:


А>>...через функцию send(), как я понял, можно посылать только строки. ...


CS>Теперь я знаю о чем думают анонимы когда видят следующее:


CS>
CS>ssize_t send(int s, const void *msgbuf, size_t len, int flags);
CS>


CS>Колись, что тебя подвигнуло на так понять это?


CS>http://tautology.org/software/man/send

Сиотрел по примеру РСДНа же. Если пишу

char msg[] = "Message\n";
...
send(sock, msg, sizeof(msg2), 0);


Все идет без траблов. А если пишу

int msg = 10;
...
send(sock, msg, sizeof(msg2), 0);


Выходит куча мата
Re[3]: Сокеты и int
От: Аноним  
Дата: 08.09.06 06:12
Оценка:
int msg = 10;
send(sock,(void*)&msg, sizeof(int), 0);

учи матчасть !
Re[4]: Сокеты и int
От: Аноним  
Дата: 08.09.06 06:17
Оценка:
Здравствуйте, Аноним, Вы писали:


А>int msg = 10;

А>send(sock,(void*)&msg, sizeof(int), 0);

А>учи матчасть !

О! Заработало... Спасибо! Буду учить, что делать
Re[3]: Сокеты и int
От: Alex_Avr Россия  
Дата: 08.09.06 10:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А если пишу


А>
А>int msg = 10;
А>...
А>send(sock, msg, sizeof(msg2), 0);
А>


А>Выходит куча мата


Так ты в sizeof не ту переменную указываешь. Что такое msg2?
Да и во втором параметре должен передаваться указатель, т.е адрес
msg.

Видимо, должно быть так:

int msg = 10;
...
send(sock, (char*)&msg, sizeof(msg), 0);


Приведение к char*, потому что в VC 7.1 и VC 8 у send () второй параметр имеет тип const char*
С уважением, Александр Авраменко.
Re[4]: Сокеты и int
От: hobby  
Дата: 08.09.06 13:54
Оценка:
еще в будущем учти один момент. Сейчас можешь не учитывать
если ты когда-либо будешь писать кроссплатформенный код, то числа нужно передавать так:

int data;

int decodedData = htonl (data);

send (..., &decoded data, ...);

а получать — так:

recv (..., &decodedData, ...);

data = ntohl (decodedData);

htonl — Host to Network
ntohl — наоборот.

иначе будут проблемы, связанные с хранением целых чисел на разных платформах.
Re[4]: Сокеты и int
От: ArtDenis Россия  
Дата: 10.09.06 15:18
Оценка:
Здравствуйте, <Аноним>, Вы писали:

Приведение к типу (void*) необязательно:
send(sock, &msg, sizeof(int), 0);
... << RSDN@Home 1.1.4 stable rev. 510>>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Сокеты и int
От: Mazay Россия  
Дата: 10.09.06 16:11
Оценка:
Здравствуйте, Аноним, Вы писали:


А>int msg = 10;

А>send(sock,(void*)&msg, sizeof(int), 0);

А>учи матчасть !


Какую матчасть? Букварь!
Главное гармония ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.