Текущий архив: 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.46 MB
Время: 0.04 c