Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.19;
Скачать: CL | DM;

Вниз

Проблема с Client/ServerSocket   Найти похожие ветки 

 
Destroyer ©   (2004-08-19 00:44) [0]

Есть код для 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. Почему? Можно ли это исправить?


 
Digitman ©   (2004-08-19 08:08) [1]


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


можно

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;


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

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


 
Digitman ©   (2004-08-19 14:35) [3]


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


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

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


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

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


 
Digitman ©   (2004-08-19 15:14) [5]


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


ты не прав


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

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


 
Digitman ©   (2004-08-19 15:39) [7]


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


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

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


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

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:59) [9]


> а OnWrite - нет


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


 
Destroyer ©   (2004-08-20 01:06) [10]

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


 
Destroyer ©   (2004-08-24 01:29) [11]

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

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

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


 
Digitman ©   (2004-08-24 08:23) [12]


> <--- ошибка


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


 
Destroyer ©   (2004-08-24 12:38) [13]

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


 
Digitman ©   (2004-08-24 12:53) [14]


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


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


 
Destroyer ©   (2004-08-25 01:08) [15]

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


 
Digitman ©   (2004-08-25 08:12) [16]


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



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


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

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


 
Destroyer ©   (2004-08-25 12:03) [17]

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


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


> связано с DNS

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


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

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.12.19;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
14-1101566505
chuk32
2004-11-27 17:41
2004.12.19
Нестандартные размеры страницы принтера


14-1101716558
Green_Templar
2004-11-29 11:22
2004.12.19
руссификатор для Windows XP


1-1102144639
Gek1
2004-12-04 10:17
2004.12.19
Помогите разобраться со строкой кода


14-1101799126
OneFragLeft
2004-11-30 10:18
2004.12.19
USB мышь и PS/2 мышь


4-1099593479
Ильичев С.А.
2004-11-04 21:37
2004.12.19
крах, перезапуск Explorer