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

Вниз

ClientSocket   Найти похожие ветки 

 
IBSN   (2003-08-01 11:05) [0]

Здравствуйте!
Делаю что-то типа сетевого чата (сервер-клиент), столкнулся с проблеммой =(

У меня клиент коннектится автоматически к серверу, если сервер стоит то все ок, а если он закрыт, выдает ошибку:
Asynchronous socket error 10061.
Как мне избежать поевления такого окошка, а просто делать коннект без конца???


 
Fredericco   (2003-08-01 11:47) [1]

В событии OnError:
ErrorCode:=0;
А если еще и во время поиска хоста, то есть от Open до OnConnect, то в OnError:
ErrorCode:=0;
Socket.Disconnect(Socket. SocketHandle);


 
IBSN   (2003-08-01 11:53) [2]

Я не нашел событие OnError =( где оно находится или как его создать???


 
Fredericco   (2003-08-01 11:57) [3]

Какими вещами пользуешься?
T[Client/Server]Socket
Udp
winsock.dll


 
IBSN   (2003-08-01 12:08) [4]

Я полный лол =) хехе, но все же вот дец изменил клиент и получился что то типа только приема сообщений, только вот выскакивает много ерров, надо от них избавиться +(

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ScktComp;

type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button2: TButton;
Timer1: TTimer;
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
nickname: string;

implementation

uses conn;

{$R *.DFM}

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var s,from_,to_: string;
begin
{присваиваем s полученную от сервера строку}
s := Socket.ReceiveText;
{Если сервер посылает нам User List}
if Copy(s,1,2) = "#U" then begin
Delete(s,1,2);
{Чистим ListBox1}

{Добавляем по одному юзеру в список. Имена юзеров разделены знаком ";"}
while Pos(";",s) > 0 do begin

Delete(s,1,Pos(";",s));
end;
Exit;
end;
{Если нам прислали общее сообщение (видимое для всех юзеров)}
if Copy(s,1,2) = "#M" then begin
Delete(s,1,2);
{Добавляем его в Memo1}
ShowMessage("Администрация: "+
Copy(s,Pos(";",s)+1,Length(s)-Pos(";",s)));
Exit;
end;
{Если нам прислали запрос на наше имя юзера}
if Copy(s,1,2) = "#N" then begin
{Посылаем ответ}
Socket.SendText("#N"+nickname);
Exit;
end;
{Если нам прислали приватное сообщение (или не нам :) )}
if Copy(s,1,2) = "#P" then begin
Delete(s,1,2);
{Выделяем в to_ - кому оно предназначено}
to_ := Copy(s,1,Pos(";",s)-1);
Delete(s,1,Pos(";",s));
{Выделяем в from_ - кем отправлено}
from_ := Copy(s,1,Pos(";",s)-1);
Delete(s,1,Pos(";",s));
{Если оно для нас, или написано нами - добавляем в Memo1
(иногда полезно убрать этот оператор if :) )}
if (to_ = nickname)or(from_ = nickname) then
ShowMessage("Администрация: "+s);
Exit;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
{Если мы хотим послать приватное сообщение, но не выбрали адресата -
нас покарают замечанием :) и выгонят из обработчика}
end;
{Если это приватное сообщение}


procedure TForm1.FormCreate(Sender: TObject);
var do_connect: Boolean;
host,port: string;
begin

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var do_connect: Boolean;
host,port: string;
begin
form1.Hide;
if not ClientSocket1.Active then begin
{Показываем окно установки соединения с сервером}
Form2 := TForm2.Create(Application);
{do_connect = True, если была нажата кнопка Connect}
{заполнение переменных до того, как мы уничтожим форму}
host := "localhost";
port := "1001";
nickname := "lol";
{Уничтожаем форму}
Form2.Free;
{Если соединение уже установлено, то обрываем его}
if ClientSocket1.Active then
( port)
Я полный лол =) хехе, но все же вот дец изменил клиент и получился что то типа только приема сообщений, только вот выскакивает много ерров, надо от них избавиться +(

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ScktComp;

type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button2: TButton;
Timer1: TTimer;
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
nickname: string;

implementation

uses conn;

{$R *.DFM}

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var s,from_,to_: string;
begin
{присваиваем s полученную от сервера строку}
s := Socket.ReceiveText;
{Если сервер посылает нам User List}
if Copy(s,1,2) = "#U" then begin
Delete(s,1,2);
{Чистим ListBox1}

{Добавляем по одному юзеру в список. Имена юзеров разделены знаком ";"}
while Pos(";",s) > 0 do begin

Delete(s,1,Pos(";",s));
end;
Exit;
end;
{Если нам прислали общее сообщение (видимое для всех юзеров)}
if Copy(s,1,2) = "#M" then begin
Delete(s,1,2);
{Добавляем его в Memo1}
ShowMessage("Администрация: "+
Copy(s,Pos(";",s)+1,Length(s)-Pos(";",s)));
Exit;
end;
{Если нам прислали запрос на наше имя юзера}
if Copy(s,1,2) = "#N" then begin
{Посылаем ответ}
Socket.SendText("#N"+nickname);
Exit;
end;
{Если нам прислали приватное сообщение (или не нам :) )}
if Copy(s,1,2) = "#P" then begin
Delete(s,1,2);
{Выделяем в to_ - кому оно предназначено}
to_ := Copy(s,1,Pos(";",s)-1);
Delete(s,1,Pos(";",s));
{Выделяем в from_ - кем отправлено}
from_ := Copy(s,1,Pos(";",s)-1);
Delete(s,1,Pos(";",s));
{Если оно для нас, или написано нами - добавляем в Memo1
(иногда полезно убрать этот оператор if :) )}
if (to_ = nickname)or(from_ = nickname) then
ShowMessage("Администрация: "+s);
Exit;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
{Если мы хотим послать приватное сообщение, но не выбрали адресата -
нас покарают замечанием :) и выгонят из обработчика}
end;
{Если это приватное сообщение}


procedure TForm1.FormCreate(Sender: TObject);
var do_connect: Boolean;
host,port: string;
begin

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var do_connect: Boolean;
host,port: string;
begin
form1.Hide;
if not ClientSocket1.Active then begin
{Показываем окно установки соединения с сервером}
Form2 := TForm2.Create(Application);
{do_connect = True, если была нажата кнопка Connect}
{заполнение переменных до того, как мы уничтожим форму}
host := "localhost";
port := "1001";
nickname := "lol";
{Уничтожаем форму}
Form2.Free;
{Если соединение уже установлено, то обрываем его}
if ClientSocket1.Active then
ClientSocket1.Close;
{Устанавливаем свойства Host и Port}
ClientSocket1.Host := host;
ClientSocket1.Port := StrToInt(port);
{Пытаемся соединиться}
ClientSocket1.Open;
end;

end;

end.


 
Fredericco   (2003-08-01 12:35) [5]

1) ClientSocket1.OnError - Есть.
2)
try
ClientSocket1.Open;
except
end;
Это на всякий случай.
3)
Var
InConnect:boolean=False;
.................
{Пытаемся соединиться}
InConnect:=True;
ClientSocket1.Open;
......

procedure TForm1.ClientSocket1 Error(..........);
begin
ErrorCode:=0;
if InConnect then begin
Socket.Disconnect(Socket.SocketHandle);
( "Скорей всего host not found!") 1) ClientSocket1.OnError - Есть.
2)
try
ClientSocket1.Open;
except
end;
Это на всякий случай.
3)
Var
InConnect:boolean=False;
.................
{Пытаемся соединиться}
InConnect:=True;
ClientSocket1.Open;
......

procedure TForm1.ClientSocket1 Error(..........);
begin
ErrorCode:=0;
if InConnect then begin
Socket.Disconnect(Socket.SocketHandle);
ShowMessage("Скорей всего host not found!");
end;
end;


 
IBSN   (2003-08-01 12:48) [6]

спасибо, попутный вопрос, а как мне в никнаме вставить его ip ???


 
IBSN   (2003-08-01 12:48) [7]

спасибо, попутный вопрос, а как мне в никнаме вставить его ip ???



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

Форум: "Сети";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
14-96365
Igor_thief
2003-09-12 12:32
2003.09.29
TreeView


1-96244
Rain_km
2003-09-17 16:17
2003.09.29
mp3


3-96053
Mexikan
2003-09-09 20:17
2003.09.29
Как прервать выполнение запроса fibplus


14-96410
Дремучий
2003-09-11 11:04
2003.09.29
Почему из форумов нет ссылки на Список Анкет?


3-96135
avch
2003-09-10 12:16
2003.09.29
Триггер





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский