Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.24;
Скачать: CL | DM;

Вниз

Научите   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
3-77293
wHammer
2002-05-24 13:24
2002.06.24
Есть ли те, кто пользуется PReport ом?


1-77407
Oleg+++
2002-06-10 22:18
2002.06.24
Как правильно использовать функцию SetSystemTime?


14-77590
Arhangel
2002-05-21 19:20
2002.06.24
Поддержка систем.


3-77279
Tutov Roman
2002-05-30 14:47
2002.06.24
Как узнать есть-ли вообще записи в таблице ?


6-77542
Heh
2002-04-15 13:10
2002.06.24
Братва, где можно взять нормальные доки в электр. виде