Форум: "Сети";
Текущий архив: 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.04 c