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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SOCKET: send(), recv() 
:(
    Опции темы
Modul
Дата 5.8.2010, 15:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



И так и так верно, но 2-й вариант родной.
Код

unsigned int socketfd;
socketfd = socket(AF_INET, SOCK_STREAM, 0);



Код

SOCKET s;
 s = socket( AF_INET, SOCK_STREAM, 0);




Это сообщение отредактировал(а) Modul - 5.8.2010, 15:19
--------------------
I'll be back !
PM MAIL   Вверх
hoshin
Дата 5.8.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Modul @ 5.8.2010,  15:02)
И так и так верно, но 2-й вариант родной.
Код

unsigned int socketfd;
socketfd = socket(AF_INET, SOCK_STREAM, 0);



Код

SOCKET s;
 s = socket( AF_INET, SOCK_STREAM, 0);


из двух примеров работает только второй с SOCEKT,
а первый ругается
warning C4244: '=' : conversion from 'SOCKET' to 'unsigned int', possible loss of data

но так понимаю, что тип SOCKET имеет тип unsigned int. 
только из-за чего компилятор ругается, он что хочет, что бы я все равно явно преобразовал тип возвращаемого значения (!!!)
s = (unsigned int)socket( AF_INET, SOCK_STREAM, 0);
после чего он перестает ругаться...

и не будет ли такое действие ошибкой с моей стороны...
ведь в книге автор четко написал, что s имеет тип int, и ни каких действий больше не надо делать.....
PM MAIL   Вверх
Alca
Дата 5.8.2010, 16:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

и не будет ли такое действие ошибкой с моей стороны...
ведь в книге автор четко написал, что s имеет тип int, и ни каких действий больше не надо делать.....


Код

c:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinSock2.h (VS 2008)

Код

/*
 * The new type to be used in all
 * instances which refer to sockets.
 */
typedef UINT_PTR        SOCKET;



Это сообщение отредактировал(а) Alca - 5.8.2010, 16:25


--------------------
PM WWW ICQ Skype Jabber   Вверх
Modul
Дата 5.8.2010, 17:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(hoshin @  5.8.2010,  15:53 Найти цитируемый пост)
и не будет ли такое действие ошибкой с моей стороны...


Так точно не будет ошибкой:
Код

SOCKET s;
 s = socket( AF_INET, SOCK_STREAM, 0);


Цитата(hoshin @  5.8.2010,  15:53 Найти цитируемый пост)
ведь в книге автор четко написал, что s имеет тип int, и ни каких действий больше не надо делать.....


Ну мало ли пишут. Читай туторы лучше.  smile 
--------------------
I'll be back !
PM MAIL   Вверх
hoshin
Дата 5.8.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот автор пишет

Код


SOCKET socket(...);
Возвращаемое значение: INVALID_SOCKET (для Windows);




может Вы знаете какое должно быть у INVALID_SOCKET значение, которое указывает, что с функцией socket(), что-то не в порядке...
или какое значение должно возвращать функция socket(), которое так же показывает на ошибку.
автор как Вы видите этого не пишет, а в инете на это особо не обращают внимание....


в моём примере 
INVALID_SOCKET = 4294967295;
и возвращаемое значение функции socket(), так же равно 4294967295.

так что это означает ошибка или наоборот, это значение (4294967295) показывает, что все хорошо?



PM MAIL   Вверх
null56
Дата 6.8.2010, 12:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(hoshin @  5.8.2010,  18:03 Найти цитируемый пост)
так что это означает ошибка или наоборот, это значение (4294967295) показывает, что все хорошо?

я лишь могу предположить, что 
4294967295(dec) == 11111111111111111111111111111111(bin) == -1(dec)
иными словамами, у тебя возвращается значение -1, что означает ошибку. Положительное значение ошибки у тебя из - за того, что ты используешь unsigned int в качестве типа переменной сокета, хотя вроде бы надо использовать чистый int

Добавлено через 6 минут и 26 секунд
кстати, об этом тебя предупреждал компилятор
Цитата

warning C4244: '=' : conversion from 'SOCKET' to 'unsigned int', possible loss of data

PM MAIL   Вверх
null56
Дата 6.8.2010, 13:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



и об этом вам писал ранее
SenkraD
PM MAIL   Вверх
Олег2005
Дата 7.8.2010, 21:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(hoshin @  5.8.2010,  14:53 Найти цитируемый пост)
ведь в книге автор четко написал, что s имеет тип int, и ни каких действий больше не надо делать.....

В *nix-ах - да, тип int.
В Виндах - тип SOCKET
PM MAIL WWW MSN   Вверх
hoshin
Дата 9.8.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всё разобрался, как можно отправлять сообщения между сервером и клиентом на одном компьютере.
Большое спасибо всем кто помог мне в этом.

Но только, когда решил отправить эти сообщения через инет между двумя компами (которые находятся в разных городах), не получается...

Компьютер на котором был запущен сервер, подключен к локальной сети, у которой есть АДСЛ выход в интернет, его ip-адрес, сейчас точно не скажу, (узнавал ip-адрес через сайт 2ip.ru), например 1.1.1.1.
Клиент был запущен так же на компьютере с такой же топологией сети, как и у серевера, его адрес , например 2.2.2.2.
(описал все это, т.к. подумал, может это надо, что бы Вы поняли, из-за чего у меня ошибка)...

Как понял, для отправки через инет, нужно было заменить в клиенте код

с
Код

    peer.sin_family = AF_INET;
    peer.sin_port = htons(7500);
    peer.sin_addr.s_addr = inet_addr("127.0.0.1");  // этот адрес заменяю


на
Код

    peer.sin_family = AF_INET;
    peer.sin_port = htons(7500);
    peer.sin_addr.s_addr =  inet_addr("1.1.1.1"); // на этот, например


но положительного результата не получил...
Так подума, потому что скачал пример сокета с сайта www.sources.codenet.ru, и там для отправки сообщений был заданы именно такие параметры.

Может кто знает, что необходимо мне сделать, что бы все заработало, или поделиться каллоритной ссылкой...
(сейчас учусь на MSVS 2005).



Это сообщение отредактировал(а) hoshin - 9.8.2010, 18:09
PM MAIL   Вверх
Олег2005
Дата 9.8.2010, 21:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вроде замена верная.
В первую очередь надо смотреть файрволл - пропускает ли он запрос от клиента
PM MAIL WWW MSN   Вверх
hoshin
Дата 9.8.2010, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вы знаете, ни разу не настраивал файрволл. 
Может в двух словах сможете объяснить как мне необходимо насторить файрволл для моего случая.

Только одна ситуация у меня на одном компьютере стоит Windows 7 (она основная) и запущена виртуальная Windows XP (virtual box).

На Win 7 запущен TCP-сервер, на Win XP TCP-клиент.

Когда первый раз запускал их (т.е. сервер и клиент) у меня на Win7 и на WinXP спрашивали (как теперь понял - это был брэндмауэр) "Хотите ли вы запустить эти прогаммы?"(что-то в этом духе). Тогда помню нажал кнопку "Разблокировать", после этого когда теперь запускаю их, система уже не спрашивает.

Что мне делать подскажите?...

P.S. знаю что этот вопрос не подходит для раздела "С/C++ сети".
но все таки - в двух словах...
PM MAIL   Вверх
Олег2005
Дата 9.8.2010, 22:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



На запуск программы обычно реагирует не файрволл, а антивирус. У вас они установлены?
Самый конечно "простой" в кавычках метод - поставить на комп сниффер - и посмотреть, уходят ли вообще пакеты в сеть. Этот способ 100%-ный.
Насчет настройки файрволла - посмотрите в сети - у меня он отключен так как стоит Комодо и я им не пользуюсь...

Добавлено через 2 минуты и 36 секунд
Цитата(hoshin @  9.8.2010,  21:40 Найти цитируемый пост)
Только одна ситуация у меня на одном компьютере стоит Windows 7 (она основная) и запущена виртуальная Windows XP (virtual box).

На Win 7 запущен TCP-сервер, на Win XP TCP-клиент.


Так что, все таки все программы на одной и той же машине?
Что то непонятно что где.....

Это сообщение отредактировал(а) Олег2005 - 9.8.2010, 22:48
PM MAIL WWW MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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