Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

Проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.032 c
14-1101669213
iZEN
2004-11-28 22:13
2004.12.19
Сравнение языков по-новому.


3-1101117223
edge
2004-11-22 12:53
2004.12.19
ODAC


14-1101507416
Homa_Programer
2004-11-27 01:16
2004.12.19
авось поможет


1-1102146192
M@D
2004-12-04 10:43
2004.12.19
PostMessage


1-1102261097
ньюбик
2004-12-05 18:38
2004.12.19
Работа с TDateTime





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский