![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему нет коннекта
KyRo © (2006-05-04 16:31:00)Я создаю сервер
Server:=TServerSocket.Create(nil);
Server.Port:=9990;
Server.Socket.OnClientRead:=ClientRead;
Server.Socket.OnClientWrite:=ClientWrite;
Server.Open;
While not Terminated do
begin
if Server.Socket.ActiveConnections>0
then
begin
for i := 0 to Server.Socket.ActiveConnections -1 do
begin
Server.Socket.Connections[i].SendText('Hello');
end;
end;
end;
После создания я проверяю наличие подсоеденившихся клиентов и посылаю строку
Так я создаю клиента
Client:=TClientSocket.Create(nil);
Client.Port:=9990;
Client.Address:='127.0.0.1';
Client.OnRead:=ClientRead;
Client.OnWrite:=ClientWrite;
Client.Open;
И по идее этому клиенту должна передатся строка .
Но при тросировке я вижу что активных соединений нет !
Что я не правильно делаю ?
balepa (2006-05-06 06:22:00) [1]
> Сергей М. © (05.05.06 15:14) [24]
Алгоритм только очень очень "общий".
А на деревню дедушке тоже неплохо бы съездить :)
Сергей М. (2006-05-05 15:14:00) [2]
> balepa © (05.05.06 15:13) [23]
Это общие фразы.
"На деревню дедушке" это называется, а не алгоритмом
balepa (2006-05-05 15:13:00) [3]
> Сергей М. © (05.05.06 15:07) [22]
Я про Шаблон алгоритма "сервера" и "клиента" ничего не говорил.
Клиент подключается к Серверу. Сервер обрабатывает запросы от клиента.
Сергей М. (2006-05-05 15:07:00) [4]
> balepa © (05.05.06 14:45) [21]
Шаблон алгоритма "сервера" и "клиента" ..
Думаю, таковой не существует.
balepa (2006-05-05 14:45:00) [5]
> balepa © (05.05.06 14:25) [19]
Шаблон чего/кого " человека" ?
Сергей М. (2006-05-05 14:38:00) [6]
> balepa © (05.05.06 14:25) [19]
Ну так изволь привести "универсальный шаблон") ...
balepa (2006-05-05 14:25:00) [7]
> Сергей М. © (05.05.06 14:19) [18]
Ну, зачем же человека так пугать :)
Сергей М. (2006-05-05 14:19:00) [8]Ждут тебя страшные засады)
KyRo (2006-05-05 12:19:00) [9]Все теперь понял спасибо
Сергей М. (2006-05-05 12:11:00) [10]
> обращаюсь к компоненте TServerSocket ?
Ну где же к TServerSocket, когда к TCustomWinSocket ?
KyRo (2006-05-05 12:09:00) [11]Спасибо работает !!
А из за чего это я ж просто обращаюсь к компоненте TServerSocket ?
Сергей М. (2006-05-05 11:47:00) [12]procedure TForm1.ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s:String;
begin
s:= Socket.ReceiveText;
...
end;
KyRo (2006-05-05 11:40:00) [13]Я вызываю Receive-метод в обработчике
procedure TForm1.ServerClientRead(Sender: TObject;;
Socket: TCustomWinSocket);
var
s:String;
begin
s:=Server.Socket.ReceiveText;
Showmessage(s);
end
А посылаю клиентом по нажатию кнопки на форме
Сергей М. (2006-05-05 11:21:00) [14]
> ShowMessage() это я просто проверяю удачно или нет
Для вывода отладочных сообщений в доп.потоке пользуй MessageBox() вместо ShowMessage()
> по чему то не хватает просто актив
Потому что у тебя ClientType = ctNonBlocking.
Самое простое - установи ClientType = ctBlocking, тогда будет "хватать".
> No adres was supplied(10057)
Видимо, ты вызываешь Receive-метод не того объекта.
KyRo (2006-05-05 11:08:00) [15]ShowMessage() это я просто проверяю удачно или нет
и по чему то не хватает просто актив.
насчет Socket1.Socket.Connect(0);
то ты прав сначала правда вроде как нет коннекта , но потом он появляется с не большой задержкой.
Ошибка которая возникает при передаче данных - No adres was supplied(10057) on api (recv)
Сергей М. (2006-05-05 10:35:00) [16]
> не знаю правильно ли это ?
Неправильно.
ClientSocket.Active := True; //этого достаточно для запуска операции коннекта с сервером
А вот дальнейшие программные действия сильно зависят от режима работы кл.гнезда - ctNonBlocking или ctBlocking
Ну и , разумеется, никакие ShowMessage() в доп.потоке недопустимы.
> ошибка что то вроде ошибки передачи
"Что то вроде" - это на деревню дедушке.
> Из за чего это может быть ?
Очевидно, из-за "Что то вроде" ...
нужна помощь ?
Изволь приводить конкретныесообщения об ошибках
KyRo (2006-05-05 10:26:00) [17]Основной не подходит по двум причинам
1 ) То что сервер и клиент будут у меня сервисами и это у меня потоки которые он порождает.
2) То что у меня сейчас тестовая программа и для удобства переноса я их сделал нитями в отдельном модуле.
Сейчас вроде конект есть
но я сделал вот так и не знаю правильно ли это ?
Socket1.Active:=True;
Socket1.Socket.Connect(0);
if Socket1.Socket.Connected then
begin
ShowMessage('1');
end
else
ShowMessage('2');
При таком открытии клиента
сервер пишет что есть активные соединения.
Но вот тоже проблема при передаче текстового сообщения
Socket1.Socket.SendText('AAA');
и попытке его приема в обработчике сервера OnClientRead
Возникает ошибка что то вроде ошибки передачи. Из за чего это может быть ?
Сергей М. (2006-05-05 08:35:00) [18]
> Application.Processmessages на вот эту строку и пишет
uses Forms
> создаю сервер в отдельном потоке
Application.Processmessages недопустим в этом случае.
Да и зачем в отдельном потоке-то ?
Чем основной не угодил ?
KyRo (2006-05-04 17:04:00) [19]Application.Processmessages на вот эту строку и пишет , а не на итерацию цикла.
Я создаю сервер в отдельном потоке может потому это не известный идентификатор ?
Сергей М. (2006-05-04 16:59:00) [20]
> что это значит ?
То и значит - итерация цикла.
Что тут не понятно ?
> у меня оно пишет
"Оно" - это кто/что ?
Ты вообще программингом занят или где ?