Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с Client/ServerSocket [D6, WinXP]


Destroyer ©   (2004-08-19 00:44:00) 

Есть код для serversocket:
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Active:=true;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ServerSocket1.Active:=false;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
 var mes:string;
begin
 edit1.text:=Socket.ReceiveText;
end;
и для clientsocket:
procedure TForm1.Button1Click(Sender: TObject);
var mes:string;
begin
ClientSocket1.Host:=Edit1.Text;
ClientSocket1.Active:=true;
mes:=edit2.Text;
ClientSocket1.Socket.SendText(mes);
ClientSocket1.Active:=false;
end;
На serversocket сообщение приходит только после второго нажатия button1. Почему? Можно ли это исправить?


P@$l-l0l-(   (2004-10-08 18:17:00) [1]

Скажите пожалуйста, как обработать Socket.Open; на предмет возникновения ошибки соединения? Ведь если коннектиться к несуществующему хосту, то вылетает ошибка:
Windows Socket error Этот хост неизвестен. Либо подскажите, что я неправильно делаю.

CSocket.Host:=Host.Text;
CSocket.Port:=StrToInt(Port.Text);
CSocket.Open;


beatles_bntu   (2004-08-26 00:41:00) [2]

М да встречался я с этим глюком просто активизацию сокета и посылание сообшения делай в разных скажем так методах т.е. например при создании формы сразу запускай сокет а при нажатии кнопки посылай месагу и все будет тип топ. да кстати про OnConnect верно подмечено


Destroyer   (2004-08-26 00:41:00) [3]


> связано с DNS

Я сначала не понял к чему ты это сказал, но потом дошло, все работает, еще раз спасибо.


Destroyer   (2004-08-25 12:03:00) [4]

Спасибо, попробую.


Digitman   (2004-08-25 08:12:00) [5]


> Destroyer ©   (25.08.04 01:08) [15]



> Какая разница


еще раз повторяю - очисть св-ва Host и Service, оставь назначенными только Address и Port

в этом случае либо коннект будет установлен либо возникнет ЛЮБАЯ ИНАЯ ошибка, но только не 11001


Destroyer   (2004-08-25 01:08:00) [6]

Какая разница, даже когда я ввожу IP вылезает та же ошибка.


Digitman   (2004-08-24 12:53:00) [7]


> Destroyer ©   (24.08.04 12:38) [13]


проверяй у себя на машине все что связано с DNS - твоя проблема именно в неразрешении имени хоста в его IP-адрес


Destroyer   (2004-08-24 12:38:00) [8]

Текст ошибки:
'Windows socket error: (11001), on API 'ASync Lookup'.


Digitman   (2004-08-24 08:23:00) [9]


> <--- ошибка


точноесообщение об ошибке приводи, а не домыслы свои !


Destroyer   (2004-08-24 01:29:00) [10]

Еще проблемка: иногда когда я отправляю сообщение появляется ошибка во время выполнения Application.Processmessages. Помоему ошибка синхронизации, т.е. клиент не может найти сервер, хотя сервер есть и включен.

clientsocket1.Active:=true;
while not ClientSocket1.Active do
Application.Processmessages; <--- ошибка
clientsocket1.Socket.SendText('ok');
clientsocket1.Active:=false;

Может перед отправкой надо произвести какие-нибудь подготовительные действия? В чем тут дело?


Destroyer   (2004-08-20 01:06:00) [11]

Спасибо всем, буду проверять.


Digitman   (2004-08-19 15:59:00) [12]


> а OnWrite - нет


не выдумывай небылиц


Эдик   (2004-08-19 15:46:00) [13]

procedure TForm1.Button1Click(Sender: TObject);
begin
 ClientSocket1.Active;
end;

procedure TForm1.ClientSocket1Write(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 ShowMessage('OnWrite!!!')
end;

OnConnect возникает а OnWrite - нет...


Digitman   (2004-08-19 15:39:00) [14]


> Эдик   (19.08.04 15:30) [6]
> такое событие не возникает, только что тест сделал...


еще раз повторяю - ты не прав

если ClientType = ctNonBlocking, это событие обязановозникнуть как минимум однократно сразу за OnConnect


Эдик   (2004-08-19 15:30:00) [15]

такое событие не возникает, только что тест сделал...


Digitman   (2004-08-19 15:14:00) [16]


> Эдик   (19.08.04 15:09) [4]


ты не прав


Эдик   (2004-08-19 15:09:00) [17]

оно же, имхо, возникает, непосредственно, когда происходит запись в сокет...


Digitman   (2004-08-19 14:35:00) [18]


> т.е. код:
> mes:=edit2.Text;
> ClientSocket1.Socket.SendText(mes);
> ClientSocket1.Active:=false;
> перенести в это событие


в общкм случае не совсем верно

если переносить, то не в OnConnect, а в OnWrite


Эдик   (2004-08-19 14:33:00) [19]

а еще для этого можно исспользовать специальное событие для клиента - OnConnect, оно возникает, когда установлена связь, т.е. код:
mes:=edit2.Text;
ClientSocket1.Socket.SendText(mes);
ClientSocket1.Active:=false;
перенести в это событие


Digitman   (2004-08-19 08:08:00) [20]


> Можно ли это исправить?


можно

procedure TForm1.Button1Click(Sender: TObject);
var mes:string;
begin
ClientSocket1.Host:=Edit1.Text;
ClientSocket1.Active:=true;
while not ClientSocket1.Active do
 Application.Processmessages;
mes:=edit2.Text;
ClientSocket1.Socket.SendText(mes);
ClientSocket1.Active:=false;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо