Форум: "Сети";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
ВнизНаучите Найти похожие ветки
← →
Heh (2002-04-17 09:46) [0]Мастера, научите плз, как с помощью TServerSocket и TClientSocket передавать данные с использованием SendStream и принимать их(не файл). Данные оправляются разной длины. И что делает TWinSocketStream? А то у меня программа вылетает после 2-й отправки. Что-то не так делаю. Если не сложно, маленький примерчик.
wbr
← →
Reindeer Moss Eater (2002-04-17 12:01) [1]Брось на форму или модуль данных TClientSocket.
Создай поток.
Передай его методу SendStream.
Вроде все.
← →
Heh (2002-04-17 12:26) [2]__________________________________________________
struct Packet{ //структура пакета
int ToUserID;
int ToHandlerID;
int FromToUserID;
int FromHandlerID;
int UserIDIfError;
int CodeError;
int LengthData;
AnsiString Data;
};
TMemoryStream *MyStream;
Packet *pak;
...........
..........
__________________________________________________________
Клиент
нажатие кнопки Send
if (!CS->Active)
{
CS->Address=Edit1->Text;
CS->Port=StrToInt(Edit2->Text);
CS->Active=true;
Edit1->Enabled=false; //адрес
Edit2->Enabled=false; //порт
}
pak->ToUserID=0;
pak->ToHandlerID=1;
pak->FromToUserID=5;
pak->FromHandlerID=2;
pak->UserIDIfError=0;
pak->CodeError=0;
int Len=Edit3->GetTextLen();
pak->LengthData=Len;
pak->Data=Edit1->Text;
MyStream->Position=0;
MyStream->Write(pak,14+Len);
CS->Socket->SendStream(MyStream);
________________________________________
сервер
struct Packet{ //структура пакета
int ToUserID;
int ToHandlerID;
int FromToUserID;
int FromHandlerID;
int UserIDIfError;
int CodeError;
int LengthData;
AnsiString Data;
};
TMemoryStream *MyStream;
Packet *pak;
...........
..........
обработка события чтения данных
int Len=Socket->ReceiveLength();
MyStream->SetSize(Len);
MyStream->Position=0;
Socket->ReceiveBuf(MyStream,Len);
pak=(Packet*)MyStream;
ListBox1->Items->Add(IntToStr(pak->ToUserID));
ListBox1->Items->Add(IntToStr(pak->ToHandlerID));
....
ListBox1->Items->Add(pak->Data);
-------------------------------------------
Подскажите что я делаю не правильно?
Выдает ошибку Project raised exception class EAcessViolation
with message "Access violation at adress ...."
← →
Donal_Graeme (2002-04-17 17:01) [3]a MyStream создан к моменту отправки?
тип int точно 2 байта занимает?
размер AnsiString равен длине строки +4 (или 8) байта.
под Pak при приёме достаточно места выделяешь?
и, кстати, указатель на данные в MemoryStream лежит в свойстве Memory, т.е.:
pak=(Packet*)MyStream->Memory; (не уверен в правильности синтаксиса - форум всё-таки по дельфям)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c