Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2010, 19: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 в 20:46.
Sam Gold вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с передачей файла 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 21:11
Проблема с передачей куки arwm Работа с сетью в Delphi 7 28.12.2007 23:44