Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не приходит текст посланый по сокету [D6, WinXP]


стьюдентЪ ©   (2006-11-28 17:04:00) 

Странная проблемка появилась, не приходит текст который отправил по сокету, вот код:

отправляю так
.......
ClientSocket1.Host:='127.0.0.1'; //temp;
ClientSocket1.Port:=1005;
try
ClientSocket1.Open;
except
MessageDlg('Connection Failed', MtError, [mbok],1);
end;
ClientSocket1.Socket.SendText(FileName);
ClientSocket1.Socket.SendText(SizeOfFile);
.....
получаю так:
.....
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Port:=1005;
ServerSocket1.Active:=True;

end;

procedure TForm1.ServerSocket1ClientWrite(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 Sm:=Sm+Socket.ReceiveText;  //Sm глобальная переменная типа String
ShowMessage(sm);

end;



в результате чего в ShowMessage пусто

Сокеты в неблокирующем режиме

Подскажите пожалуйса, в чём грабли?
Заранее благодарен


стьюдентЪ   (2006-11-29 13:26:00) [1]

Благодарю за исчерпывающие ответы :)


Сергей М.   (2006-11-29 13:02:00) [2]


> почему так происходит?


Потому что неблокирующий режим.

В этом режиме достоверным фактом успешного установления соединения является не факт успешного вызова метода Open(), а факт возникновения события OnConnect (и следом за ним - OnWrite как факт готовности гнезда к передаче данных партнеру по установленному только что соединению)

Бессмысленно передавать что бы то ни было раньше чем возникнет событие OnConnect.


Dmitrij_K   (2006-11-29 13:01:00) [3]


> Интересно, почему так происходит?

потому

> Сокеты в неблокирующем режиме


стьюдентЪ   (2006-11-29 12:46:00) [4]

Заметил интересную вещ:
если написать так:

ClientSocket1.Host:='127.0.0.1'; //temp;
ClientSocket1.Port:=1005;
try
ClientSocket1.Open;
except
MessageDlg('Connection Failed', MtError, [mbok],1);
end;
if ClientSocket1.Active=True then
ClientSocket1.Socket.SendText(FileName);

то пересылки данных не произойдёт, так как сокет по каким-то прчинам не активен, но если повторно запустить на выполнение процедуру в которой присутствует выше написанный код, то всё пройдёт на ура, или если процедуру соединения засунуть в Button1.Click, а процедуру отправки в Button2.Click, то тоже всё отправится, но если всё засунуть в Button1.Click то отправка произойдёт только со второго клика Button1
Интересно, почему так происходит?


стьюдентЪ   (2006-11-29 12:36:00) [5]

Сергей М. ©   (29.11.06 08:23) [4]
благодарю за ответ


Сергей М.   (2006-11-29 08:23:00) [6]


> стьюдентЪ


+ [2]
А принимать, соответственно, в On[Client]Read


стьюдентЪ   (2006-11-28 20:21:00) [7]

>Dmitrij_K
Благодарю


Dmitrij_K   (2006-11-28 18:34:00) [8]


> Сокеты в неблокирующем режиме

Отправлять надо в OnWrite


стьюдентЪ   (2006-11-28 17:05:00) [9]

перед отправкой переменные FileName и SizeOfFile не пустые


Наверх

Титульная страница Поиск, карта сайта Написать письмо