Главная страница
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.021 c
1-77332
chernoruk
2002-06-11 07:14
2002.06.24
Вид формы на разных мониторах


3-77321
Dmitr
2002-05-31 07:48
2002.06.24
ADO, D6, SQL


1-77374
Dmitry Sheenok
2002-06-10 19:38
2002.06.24
Код виртуальной клавиши


14-77564
lipskiy
2002-05-17 18:10
2002.06.24
Набор тестеров кода в UBPFD


14-77553
Voldemar
2002-05-20 01:48
2002.06.24
Language pack для IS Pro 6.30