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

Вниз

Не приходит текст посланый по сокету   Найти похожие ветки 

 
стьюдентЪ   (2006-11-28 17:04) [0]

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

отправляю так
.......
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-28 17:05) [1]

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


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


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

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


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

>Dmitrij_K
Благодарю


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


> стьюдентЪ


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


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

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


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

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

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
Интересно, почему так происходит?


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


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

потому

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


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


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


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

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

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


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

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



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

Текущий архив: 2007.06.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
2-1180009336
Darvin
2007-05-24 16:22
2007.06.17
Экспорт таблицы из StringGrid в Excel


2-1179930089
Sonia
2007-05-23 18:21
2007.06.17
Закраска цветом компонентов


2-1180316632
snowkam2
2007-05-28 05:43
2007.06.17
GIf and Delphi


1-1176982436
Loginov Dmitry
2007-04-19 15:33
2007.06.17
Объекты синхронизации


1-1176884417
>>DEATH<<
2007-04-18 12:20
2007.06.17
отправка запроса