![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с записью в сокет непосредственно после его открытия [D5, Win95/98, WinXP]
Basilio © (2003-05-30 09:58:00)делаем:
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket.host:=Machine;
ClientSocket.Port:=Port;
ClientSocket.Open;
MemoLog.Lines.Add("Sending HELO1");
ClientSocket.Socket.SendText("HELO1!");
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket.Socket.SendText("HELO2!");
end;
при нажатии на Button1 текст не посылается (сервер ничего не печатает)!
при нажатии на Button2 - всё ОК. в чём дело?
Alg (2003-06-01 04:25:00) [1]Угу... соединению время нужно, чтобы встать :-)
izx (2003-05-31 12:01:00) [2]ClientSocket.Socket.SendText("HELO1!");
нужно делать не сразу после открытия сокета,
а в событии onConnect
Fredericco (2003-05-30 19:06:00) [3]Не корректно.
Так еще более менее:
var
NewConnect:boolean=False;
procedure YouProc;
begin
ClientSocket.host:=Machine;
ClientSocket.Port:=Port;
NewConnect:=False;
try
NewConnect:=True;
ClientSocket.Open;
except
end;
end;
.....
procedure TForm1.ClientSocket1Write(Sender: TObject;
Socket: TCustomWinSocket);
begin
if NewConnect then begin
MemoLog.Lines.Add("Sending HELLO1");
ClientSocket.Socket.SendText("HELLO1");
NewConnect:=False;
end;
end;
Basilio (2003-05-30 17:32:00) [4]SendText возвращает ноль!
На сервере повешен обработчик OnClientRead - он вызывает ReceiveText - и от первой кнопки текст не печатается, а от второй - печатается.
решение проблемы применено следующе:
ClientSocket.host:=Machine;
ClientSocket.Port:=Port;
ClientSocket.Open;
while not ClientSocket.Socket.Connected do Application.ProcessMessages;
MemoLog.Lines.Add("Sending HELLO1");
ClientSocket.Socket.SendText("HELLO1");
Вроде работает. Прошу оценить корректность
Fredericco (2003-05-30 11:59:00) [5]При открытии сокета, если выбран режим csNonBlockin, то факт того, что сокетное гнездо готово к передаче данных сигнализируется тебе сообщением OnWrite. Да и влюбом случае, если сокет по каким либо причинам не был готов к отправке данных (не был открыт, был переполнен буфер и т.д.), а теперь стал готов - то вызывается процедура OnWrite.
MetalFan (2003-05-30 10:16:00) [6]а еще проверяй результат SendText...
MetalFan (2003-05-30 10:12:00) [7]а как ты определяешь, что что-то пришло на сервер???