Главная страница
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.027 c
15-1179999523
Vlad Oshin
2007-05-24 13:38
2007.06.17
Подскажите с блокировками. MSSQL-ADO


2-1180346730
nem0
2007-05-28 14:05
2007.06.17
File To String


2-1180096066
ambhtr
2007-05-25 16:27
2007.06.17
Как привести строки разной кодировки к одной


2-1180428969
Василий
2007-05-29 12:56
2007.06.17
Просмотр ячейки в StringGrid


2-1180015207
Я Гость
2007-05-24 18:00
2007.06.17
ADO + paradox + cp1251