Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];

Вниз

Опять Socket-Ы :-)))!!! Ну нихрена не работает господа!!!!   Найти похожие ветки 

 
RUS1   (2003-03-12 09:48) [0]

Всем привет!!!
Сервер, по кнопке:
procedure TForm1.Button3Click(Sender: TObject);
begin
ServerSocket1.Socket.Connections[0].SendBuf(Parameter,SizeOf(Parameter));
end;

Клиент:
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var L :Integer;
buf :PChar;
src :TFileStream;
begin
L:=Socket.ReceiveLength;
GetMem(buf,L);
Socket.ReceiveBuf(buf,L);
src:=TFileStream.Create("d:\tmp",fmOpenReadWrite);
src.Seek(0,soFromEnd);
src.WriteBuffer(buf,L);
src.Free;
FreeMem(buf);
end;

Результат: Acsess viol...что сделано не правильно???
Parameter - запись с массивами и строками типа String[x].
Ктонибуть ТОЛКОМ по порядку обьясните раз и навсегда как передавать данные по сокету, какие события использовать для сервера какие для клиента???


 
Digitman   (2003-03-12 09:59) [1]

Socket.ReceiveBuf(buf^,L);


 
RUS1   (2003-03-12 10:07) [2]

Спасибо брат!!! Сейчас как попробую....
... да вроде получилось (стучу три раза по голове)


 
Digitman   (2003-03-12 10:16) [3]

не будет все это работать как положено в условиях глоб.сети при non-blocking-режиме - нет обработки рез-та вызова SendBuf(), нет обработки OnWrite() и т.д. и т.п.

это - раз.

второе.

на строчке

src.WriteBuffer(buf,L);

ты рано или поздно получишь белиберду в принятых данных (в худ.случае - AV), ибо L = ReceiveLength() может не соответствовать реальному результату вызова ReceiveBuf() (реально ReceiveBuf() вернет меньшее значение)

см.хэлп на ReceiveLength()


 
RUS1   (2003-03-12 11:09) [4]

Да так и есть приходят не данные а полный ОТСТОЙ!!!!!
как же решить проблему????


 
Digitman   (2003-03-12 11:14) [5]


> как же решить проблему


я ему про фому , а он все - про ерему)

ты вчитался в пост от (12.03.03 10:16) ? проблески мысли хоть какие-то имеются у тебя по этому поводу ?


 
RUS1   (2003-03-12 11:59) [6]

ок. тоды такой вопрос: по какому событию сервера можно начать посылать данные клиенту, при условии не переподключения с ним в non-clock режиме тоесть: работает сервер к нему подключены слиенты, на сервер пришли данные их нужно разослать клиентам как инициировать передачу данных, другими словами вызвать событие OnClientWrite для начала пердачи данных?


 
Digitman   (2003-03-12 12:15) [7]

событие On[Client]Write() возникает как минимум однократно - сразу за событием On[Client]Connect() - сигнализируя о готовности буфера передатчика к приему данных, предназначенных к пересылке.

впоследствии это событие возникает всякий раз, когда в non-blocking-режиме любой из send-методов, вызванный ранее, вернул отказ, связанный с переполнением буфера передачи (его размер по-умолчанию ~ 8кб). Событие извещает об освобождении буфера передачи (т.е. все данные, помещенные в него одним или более чем одним вызовом send-метода, успешно "вытолкнуты" в канал связи с приемником) и по факту его возникновения буфер можно наполнять снова, вызывая send-методы


 
RUS1   (2003-03-12 12:39) [8]

Уважаемый DIGITMAN ты говоришь что я не читаю что ты пишеш :-)), возможно.... но как я погляжу ты тоже не сильно внимательно читаеш что я пишу... :-)) про буферы я уже начитался из прошлых конференций (твое творчество спасибо), но сейчас я спрашиваю КАК вызвать ети событие для передачи данных On[Client]Write() НЕ отключаясь от клиента!!!! тоесть событие Connect прошло уже давно!!!! и предыдущий пакет данных уже тоже давно отослан и забыт ... но вот пришли новые данные на сервер и как их посылать если напрямую в non-clock режиме метод ServerSocket1.Socket.Connections[0].SendBuf(Parameter,SizeOf(Parameter)) не работает??? вот в чем вопрос!!!


 
Digitman   (2003-03-12 12:50) [9]


> в non-clock режиме


что еще за режим такой ? 2-й раз упоминаешь уже ! не знаю я такого


> метод ServerSocket1.Socket.Connections[0].SendBuf(Parameter,SizeOf(Parameter))
> не работает??? вот в чем вопрос!!!



Не работает у тебя, видимо, голова, а не этот вызов ! Я тебе в который раз уже говорю, что это - ФУНКЦИЯ !!! И у нее есть результат. И в хэлпе достаточно понятно описано, как реагировать на тот или иной результат, в т.ч. в привязке к событию OnWrite()

Никакой результат вызова, как видно из твоего кода , тебя не интересует вовсе, тебе на него ровным счетом плевать, поскольку вызываешь ты этот метод как процедурный, а не функциональный - вызвал его и хрен с ним, нехай сам там разбирается).
Что ж удивляться-то после этого, коль не работает передатчик как положено ?
А событие никак не вызвать. Я тебе только что объяснил, что оно возбуждается компонентом при опред. условиях. Вчитайся в эти условия !


 
Digitman   (2003-03-12 12:59) [10]

а если уж тебя приспичило вызвать ОБРАБОТЧИК события, то делается это точно так же, как и вызов любого другого метода объекта

procedure TMyForm.MyServerClientWrite(Sender: TObject; Socket: TCustomWinSocket);
begin
.. вызов Send-метода
end;

...

MyServerClientWrite(MyServerSocket, SomeActiveConnection);



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
14-23336
Шоломицкий
2003-04-08 16:19
2003.05.08
Загрузить txt файл в Tmemo


6-23254
Fixxxer
2003-03-06 02:03
2003.05.08
Как узнать какая винда стоит на другой машине в локалке


14-23371
vopros
2003-04-21 14:43
2003.05.08
У меня такое впечатление что здесь одни бездельники сидят


1-23073
maksimenkon
2003-04-25 17:18
2003.05.08
Как уменьшить картинку???


1-23055
Zheka
2003-04-24 09:34
2003.05.08
Копирование файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский