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