C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Сокеты, метод ReceiveBuf
Лена
Отправлено: 24.05.2005, 19:16


Не зарегистрирован







В клиентском приложении отправляю двоичный файл на сервер

TFileStream * SF = new TFileStream(OpenDialog1->FileName, fmOpenRead);
ClientSocket1->Socket->SendStream(SF);

Как организовать диспечерезацию на принимающем сервере (ServerSocket), чтобы он понял, что пришел двоичный файл?
Если отправлю текст методом SendText(), то тут все просто, в начале текста ставлю значок “#”, затем на сервере удалю его и работаю с оставшимся текстом.

Соответственно как принять от сервера обработанный двоичный файл, что писать вместо многоточия и правильно ли это? Предварительно имя двоичного файла уже занесено в SaveDialog1->FileName

if(SaveDialog1->Execute())
{

TFileStream *SF = new TFileStream(SaveDialog1->FileName.c_str(), fmCreate);
int Bufer = Socket->ReceiveLength();

SF->CopyFrom((Socket->ReceiveBuf(..... ,Bufer)), 0); //как тут правильно?

SF->Free();

}

Лена
Отправлено: 25.05.2005, 17:02


Не зарегистрирован







Компоненты ServerSocket и ClientSocket.

В клиентском приложении посылаю файл:

try
{
TFileStream * SF = new TFileStream(OpenDialog1->FileName, fmOpenRead);
ClientSocket1->Socket->SendStream(SF);
}
catch(...)
{
ShowMessage("Ошибка передачи");
}

В серверном обрабатываю и посылаю клиентам. Где ошибка? Как правильно?

int Bufer = Socket->ReceiveLength();
TFileStream * Bufs;
Socket->ReceiveBuf(Bufs, Bufer);

try
{
ServerSocket1->Socket->SendStream(Bufs);
}
catch(...)
{
ShowMessage("Ошибка");
}

Guest
Отправлено: 25.05.2005, 17:13


Не зарегистрирован







Посмотрите тему TWinSocketStream
Лена
  Отправлено: 25.05.2005, 19:09


Не зарегистрирован







Не могу найти поиском по форуму.
AVC
Отправлено: 26.05.2005, 08:16


Ветеран

Группа: Модератор
Сообщений: 1583



Не по форуму а по Help'у
Лена
Отправлено: 26.05.2005, 12:07


Не зарегистрирован







На форуме нашла пример на паскале, совсем не понятно. В Help Builder нашла как пересылать текст, но с этим все понятно. Других примеров тоже не нашла в сети, только на паскале.

Мой новый вариант, тоже не работает:

Отправка сообщения на сервер из клиентского сообщения.

TFileStream * SF = new TFileStream(OpenDialog1->FileName, fmOpenRead);
ClientSocket1->Socket->SendStream(SF);


Прием на сервере ServerSocket1ClientRead и отправка клиентам

int Bufer = Socket->ReceiveLength();
char * Bufs = new char[Bufer+1];
Socket->ReceiveBuf(Bufs, Bufer);
TMemoryStream* str = new TMemoryStream ();
str->Position = 0;
str->WriteBuffer((void*)Bufs,Bufer);
str->Position = 0;
try
{

for(int i= 0;iSocket->ActiveConnections ;i++)
ServerSocket1->Socket->Connections[i]->SendBuf((void*)str,Bufer);
}
catch(...)
{
ShowMessage("Íå õî÷åò");
}
delete Bufs;
str->Free();
return;


Тоже не работает.

Asher
Отправлено: 26.05.2005, 12:23


Мастер участка

Группа: Модератор
Сообщений: 550



Привет
Сходите на Сайт Devnvd
Там есть пример передачи файла, с TServerSocket и TClientSocket

Вернуться в Вопросы программирования в C++Builder