Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
ВнизПочему нет коннекта Найти похожие ветки
← →
KyRo (2006-05-04 16:31) [0]Я создаю сервер
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;
И по идее этому клиенту должна передатся строка .
Но при тросировке я вижу что активных соединений нет !
Что я не правильно делаю ?
← →
Сергей М. © (2006-05-04 16:37) [1]
> тросировке
Кого "тросируешь"-то ? Клиента ? Сервера ?
← →
KyRo (2006-05-04 16:39) [2]Сервера
if Server.Socket.ActiveConnections>0
then
begin
for i := 0 to Server.Socket.ActiveConnections -1 do
begin
Server.Socket.Connections[i].SendText("Hello");
Вот эти строчки и не одного соединения нет. Всегда равно 0
← →
Сергей М. © (2006-05-04 16:45) [3]
> Всегда равно 0
"Воткни" в итерацию сего цикла строчку
Application.Processmessages
и да пребудет с тобой счастье ... на время ...
← →
KyRo (2006-05-04 16:47) [4]А что это значит ?
← →
KyRo (2006-05-04 16:49) [5]Тем более что у меня оно пишет не известный идентификатор
← →
Сергей М. © (2006-05-04 16:59) [6]
> что это значит ?
То и значит - итерация цикла.
Что тут не понятно ?
> у меня оно пишет
"Оно" - это кто/что ?
Ты вообще программингом занят или где ?
← →
KyRo (2006-05-04 17:04) [7]Application.Processmessages на вот эту строку и пишет , а не на итерацию цикла.
Я создаю сервер в отдельном потоке может потому это не известный идентификатор ?
← →
Сергей М. © (2006-05-05 08:35) [8]
> Application.Processmessages на вот эту строку и пишет
uses Forms
> создаю сервер в отдельном потоке
Application.Processmessages недопустим в этом случае.
Да и зачем в отдельном потоке-то ?
Чем основной не угодил ?
← →
KyRo (2006-05-05 10:26) [9]Основной не подходит по двум причинам
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 10:35) [10]
> не знаю правильно ли это ?
Неправильно.
ClientSocket.Active := True; //этого достаточно для запуска операции коннекта с сервером
А вот дальнейшие программные действия сильно зависят от режима работы кл.гнезда - ctNonBlocking или ctBlocking
Ну и , разумеется, никакие ShowMessage() в доп.потоке недопустимы.
> ошибка что то вроде ошибки передачи
"Что то вроде" - это на деревню дедушке.
> Из за чего это может быть ?
Очевидно, из-за "Что то вроде" ...
нужна помощь ?
Изволь приводить конкретные сообщения об ошибках
← →
KyRo (2006-05-05 11:08) [11]ShowMessage() это я просто проверяю удачно или нет
и по чему то не хватает просто актив.
насчет Socket1.Socket.Connect(0);
то ты прав сначала правда вроде как нет коннекта , но потом он появляется с не большой задержкой.
Ошибка которая возникает при передаче данных - No adres was supplied(10057) on api (recv)
← →
Сергей М. © (2006-05-05 11:21) [12]
> ShowMessage() это я просто проверяю удачно или нет
Для вывода отладочных сообщений в доп.потоке пользуй MessageBox() вместо ShowMessage()
> по чему то не хватает просто актив
Потому что у тебя ClientType = ctNonBlocking.
Самое простое - установи ClientType = ctBlocking, тогда будет "хватать".
> No adres was supplied(10057)
Видимо, ты вызываешь Receive-метод не того объекта.
← →
KyRo (2006-05-05 11:40) [13]Я вызываю Receive-метод в обработчике
procedure TForm1.ServerClientRead(Sender: TObject;
;
Socket: TCustomWinSocket);
var
s:String;
begin
s:=Server.Socket.ReceiveText;
Showmessage(s);
end
А посылаю клиентом по нажатию кнопки на форме
← →
Сергей М. © (2006-05-05 11:47) [14]procedure TForm1.ServerClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
s:String;
begin
s:=Socket.ReceiveText;
...
end;
← →
KyRo (2006-05-05 12:09) [15]Спасибо работает !!
А из за чего это я ж просто обращаюсь к компоненте TServerSocket ?
← →
Сергей М. © (2006-05-05 12:11) [16]
> обращаюсь к компоненте TServerSocket ?
Ну где же к TServerSocket, когда к TCustomWinSocket ?
← →
KyRo (2006-05-05 12:19) [17]Все теперь понял спасибо
← →
Сергей М. © (2006-05-05 14:19) [18]Ждут тебя страшные засады)
← →
balepa © (2006-05-05 14:25) [19]
> Сергей М. © (05.05.06 14:19) [18]
Ну, зачем же человека так пугать :)
← →
Сергей М. © (2006-05-05 14:38) [20]
> balepa © (05.05.06 14:25) [19]
Ну так изволь привести "универсальный шаблон") ...
← →
balepa © (2006-05-05 14:45) [21]
> balepa © (05.05.06 14:25) [19]
Шаблон чего/кого "человека" ?
← →
Сергей М. © (2006-05-05 15:07) [22]
> balepa © (05.05.06 14:45) [21]
Шаблон алгоритма "сервера" и "клиента" ..
Думаю, таковой не существует.
← →
balepa © (2006-05-05 15:13) [23]
> Сергей М. © (05.05.06 15:07) [22]
Я про Шаблон алгоритма "сервера" и "клиента" ничего не говорил.
Клиент подключается к Серверу. Сервер обрабатывает запросы от клиента.
← →
Сергей М. © (2006-05-05 15:14) [24]
> balepa © (05.05.06 15:13) [23]
Это общие фразы.
"На деревню дедушке" это называется, а не алгоритмом
← →
balepa © (2006-05-06 06:22) [25]
> Сергей М. © (05.05.06 15:14) [24]
Алгоритм только очень очень "общий".
А на деревню дедушке тоже неплохо бы съездить :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.012 c