Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 28.04.2010, 18:40   #1
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию Беспредел с передачей строк

функция отправляющая строку на сервер:
void send_data(SOCKET client,string data){
char buf_size[100];
ltoa(sizeof(data),buf_size,10);
send(client,buf_size,100,0); //=======size of data

char *buf;
buf=(char *)malloc(sizeof(data));

memcpy(&buf,&data,sizeof(data));
send(client,buf,sizeof(data),0);
cout<<"buf "<<buf<<endl;
free(buf);


}


Принимаем строку
string recv_data(SOCKET client){
string data;
char *buf_size;
buf_size=(char *)malloc(100);
recv(client,buf_size,100,0);
int size=atol(buf_size);
char *buf;
buf=(char *)malloc(size);
recv(client,buf,size,0);
memcpy(&data,&buf,size);
cout<<buf<<endl;
free(buf);
return data;
}

Вышеупомянутые функции используются для передачи на сервер полей объекта Message :
class Message{

protected:

string message;
string from;
string target;
SOCKET client_from;

public:

Message();
Message(string& cl_from,string& cl_to,string& mess,SOCKET& sock_from);
Message(const Message& mes);
Message& operator =( Message&);
string get_from();
string get_target();
string get_mess();
SOCKET get_socket();
int get_from_length();
int get_target_length();
int get_message_length();
~Message();
};

Функция, передающая Message
void UploadMess( Message mes,SOCKET client){
string froms,targ,mess;
froms="";
targ="";
mess="";
froms=froms.append(mes.get_from());
targ=targ.append(mes.get_target());
mess=mess.append(mes.get_mess());

send_data(client,froms);
send_data(client,targ);
send_data(client,mess);

}


принимающая Message :
Message RecvMess( SOCKET client){

string froms, targ, mess;
froms=recv_data(client);
cout<<froms<<endl;
targ=recv_data(client);
cout<<targ<<endl;
mess=recv_data(client);
cout<<mess<<endl;


Message messag(froms,targ,mess,client);
return messag;
}

Проблема в следующем: при копировании строки в память к ней добавляются посторонние символы, а при чтении строки из буфера на сервере вообще творится беспредел, а потом он вылетает
Единственный способ стать умнее - играть с более умным противником.

Последний раз редактировалось Sam Gold; 28.04.2010 в 19:46.
Sam Gold вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с передачей файла BleStaR C++ Builder 1 15.02.2010 20:37
Проблема с передачей значения в функцию steklyashka Помощь студентам 3 19.11.2009 22:19
На Украине реально беспредел творится? Hallo Свободное общение 126 25.12.2008 10:37
Проблема с передачей данных методом POST Aiden Работа с сетью в Delphi 0 21.09.2008 20:11
Проблема с передачей куки arwm Работа с сетью в Delphi 7 28.12.2007 23:44


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840