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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с сокетом, Ошибка сигментирования в классе 
:(
    Опции темы
knopka
Дата 20.10.2008, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Начал писать программку для работы с сокетами.
Взял готовый рабочий код.(спасибо авторам)
Дописал класс для ввода и вывода сообщения.
В компиляторе не ругается, но при запуске
пишет ошибку сигментирования. Практики в ООП мало.
Подскажите пожалуйста в чём ошибка и куда копать. 
Код

#include "ClientSocket.h"
#include "SocketException.h"
#include <iostream>
#include <string>
using namespace std;
/*  класс для внесения сообщений  */
class Message
{
    private:
      std::string wrMessag; //запрос
      std::string rdMessag;//ответ
    public:
      string readSocket(ClientSocket&);//читаем из сокета
      string writeSocket(ClientSocket&);//пишем в сокет
};
//********************************
string Message::readSocket(ClientSocket& client_socket)
{
   client_socket >> rdMessag;//ответ сервера
}
//********************************
string Message::writeSocket(ClientSocket& client_socket)
{
    client_socket << " Test message."
}
//********************************
int main ()// int argc, int argv[] )
{
  try
    {

      ClientSocket client_socket ( "localhost", 30000);

    
      //std::string reply;
      Message msg;

      try
    {
      //client_socket << "  Test message.";
              //client_socket >> reply;//ответ сервера

      msg.writeSocket(client_socket);
      msg.readSocket(client_socket);
      //client_socket >> reply;//ответ сервера
    }
      catch ( SocketException& ) {}

      std::cout << "We received this response from the server:\n\"";// << reply << "\"\n";;

    }
  catch ( SocketException& e )
    {
      std::cout << "Exception was caught:" << e.description() << "\n";//не приконектились
    }

  return 0;
}

PM MAIL ICQ   Вверх
eyeofhell
Дата 20.10.2008, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Адепт
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 16.10.2008
Где: Россия, Москва

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



Код

В компиляторе не ругается, но при запуске
пишет ошибку сигментирования. Практики в ООП мало.


Нужно запустить под отладчиком и после ошибки посмотреть в какой она строке.
PM MAIL ICQ   Вверх
knopka
Дата 20.10.2008, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



то есть gdb надо натравить на файл с раширением .o да?
А то что я не использую деструктор в явном виде не может служить ошибкой?  
PM MAIL ICQ   Вверх
MAKCim
Дата 20.10.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



knopka, 
что-то мне подсказывает, что проблема в реализации >> и << для ClientSocket

Цитата(knopka @  20.10.2008,  08:43 Найти цитируемый пост)
то есть gdb надо натравить на файл с раширением .o да?

нет, исполняемый файл (без расширения)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
knopka
Дата 20.10.2008, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

// Implementation of the ClientSocket class

#include "ClientSocket.h"
#include "SocketException.h"


ClientSocket::ClientSocket ( std::string host, int port )
{
  if ( ! Socket::create() )
    {
      throw SocketException ( "Could not create client socket." );
    }

  if ( ! Socket::connect ( host, port ) )
    {
      throw SocketException ( "Could not bind to port." );
    }

}


const ClientSocket& ClientSocket::operator << ( const std::string& s ) const
{
  if ( ! Socket::send ( s ) )
    {
      throw SocketException ( "Could not write to socket." );
    }

  return *this;

}


и хедер

Код



// Definition of the ClientSocket class

#ifndef ClientSocket_class
#define ClientSocket_class

#include "Socket.h"

class ClientSocket : private Socket
{
 public:

  ClientSocket ( std::string host, int port );
  virtual ~ClientSocket(){};

  const ClientSocket& operator << ( const std::string& ) const;    //пишем в сокет
  const ClientSocket& operator >> ( std::string& ) const;        //читаем из сокета

};

#endif


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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