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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Winsock не работает в нутрях класса 
V
    Опции темы
vood
Дата 16.12.2006, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



пытался создать класс сокетано столкнулся с проблемой. функция send из winsock не хочет работать в классе. для тестирования я использовал shttps.
код
Код

class sock{
public:
SOCKET hwd;
WSADATA g;
sockaddr_in h;
~sock();
void sen(string message);
sock(int port,char* addr);
};


void sock::sen(string message){
char *st = new char[sizeof(message)];
strcpy(st,message.c_str());
send(hwd,st,sizeof(message),0);
cout << st;
delete st;
}

sock::sock(int port,char* addr){
WSAStartup(257,&g);
hwd=socket(AF_INET,SOCK_STREAM,0);
h.sin_addr.s_addr=inet_addr(addr);
h.sin_port=htons(port);
h.sin_family=AF_INET;
ZeroMemory(h.sin_zero,sizeof(h.sin_zero));
connect(hwd,(SOCKADDR *)&h,sizeof(h)) || (cout << "connected!");
}

sock::~sock(){
closesocket(hwd);
WSACleanup();
}

int main(int argc, char *argv[])
{
sock l(80,argv[1]);
string hj="ass";
l.sen(hj);
system("pause");
return 0;
}

компелируется без ошибок но на сервер ничего не передает.
с ООП  я не очень дружу и поэтому прошу вашего совета: почему оно не работает??


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Anikmar
Дата 16.12.2006, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Мне сходу не понравилась вот эта конструкция:
char *st = new char[sizeof(message)];

sizeof(message) - это у нас размер объекта типа string

Почему вы уверены что он совпадает с размером строки?

Может быть вы имели в виду так:

char *st = new char[message.Length()+1];

Некторые сомнения вызывает аналогичная конструкция:
ZeroMemory(h.sin_zero,sizeof(h.sin_zero));

Это сообщение отредактировал(а) Anikmar - 16.12.2006, 10:44
PM MAIL ICQ   Вверх
vood
Дата 16.12.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Опишу прооблему детальней
shttps выводит лог полученной информации
я отправляю "ass" он выводит "a^!!"

Вот эта конструкция рабочая (проверено) ZeroMemory(h.sin_zero,sizeof(h.sin_zero));



--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Anikmar
Дата 16.12.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



На счет второй конструкции - все понятно (я просто невнимательно посмотрел)

А что возвращает функция send? По идее она должна вернуть количество отправленных байтов.
Надо посмотреть в отладчике или другим способом что конкретно передает send (значения параметров) и что она возвращает.
PM MAIL ICQ   Вверх
witex
Дата 16.12.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я вот не понимаю, зачем определять WSADATA, если ты его не используешь в WSAStartup.
Anikmar, прав на счёт определения длинны.
Вот что имееться ввиду.

Код

void sock::sen(string message){
char *st = new char[message.Lenght()+1];
strcpy(st,message.c_str());

send(hwd,st,message.Lenght()+1,0);
cout << st;
delete st;
}



--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
vood
Дата 17.12.2006, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ради интереса написал наи делфях сервер который логирует данные
и знаете что он залогировал? ass! так что это были просто баги shttps
спасибо всем за помощь(отдельное спасибо создателю shttps smile )!


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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