Toon posts:

[Delphi] Rare Socket Connection Problem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hi,

ik ben nu bezig met sockets in delphi

ik heb in de client side 3 sockets draaien.

1 authentication en 1 Find TClientSockets en 1 FindServer TServerSocket

in het begin authentication socket maakt verbinding met de server ergens op het internet. Daarna wordt in de client side FindServer socket gestarts die bedoeld is om zoek resultaten te ontvangen.

Nu een clientB verbinding wilt maken met ClientA om zoek resultaten te versutren en bij ClientA side wordt de procedure sckAuthenticationConnect aan geroepen terwijl sckFindServerConnect aan geroepen moet worden.

Weet iemand waarom dit gebeurt?

Bij client side tijdens het opstarted van de app gebeurt onder andere het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
                try
                        {- Set Host Address -}
                        sckAuthentication.Host := edtAR_Addr.Text;

                        {- Activate Socket, Use Open To Bypass Firewalls -}
                        sckAuthentication.Open;
                        sckFindServer.Open;
                except
                        statusbar.Panels.Items[0].Text := 'Status: Error Signing In :(';
                        MessageDlg('Some Problems With Signing You In, Please Try Again At A Laste Time.', mtInformation, [mbOk], 0);
                end;


als een client iets vindt dan worden de volgende regels uitgevoerd
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
                                try
                                        sckFindClient.Host := strReqstorIP;
                                        sckFindClient.open;
                                except
                                        //do nothing
                                end;

                                if sckFindClient.Active then
                                begin
                                        sckFindClient.Socket.SendText(AddSpace('SR ACK',15) + strSearchTrigger + ';' + strSearchResult);
                                        application.ProcessMessages;
                                        sckFindClient.Close;
                                end;


bij sckFindClient.open zou hij namelijk connecten naar de ip strReqstorIP op port 3000 en hij moet sckFindServerConnect aan roepen bij strReqstorIP maar dat gebeurt juist niet maar wordt sckAuthentication aan geroepen.

heeft iemand enige idee?

ik heb in vb veel socket apps gemaakt maar nooit zoiets tegen gekomen, dit is eerste app in delphi dus ik vermoed het michien anders is dan ik gewend ben.

alvast bedankt voor de antwoorden :)

Raju

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dit is een beetje te weinig informatie om een conclusie te trekken. Heb je al gedebugged? Hoe weet je zo zeker dat die ander aangeropen wordt? Wat is de call stack op dat punt? Misschien kan je een voorbeeldprojectje uploaden?

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
nee het is een heel groot project dus voorbeeld uithalen is moeilijk en trouwens ik heb wel gedebugged en na dat de client probeert te connecten naar de strReqstorIP dan wordt er tegelijker tijd de authenticationConnect procedure aangeropen ik heb locally geprobeerd

maar toen ik via internet probeerde gebeurt het zelfde wat bedoel je met call stack? kun je me eebtjee uitleggen? of effe zeggen waar ik daar meer info kan vinden :)

mischien helpt dat mij

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Zet een breakpoint in je event en als ie daar stopt kijk je naar de call stack (debug window). Daar kan je zien welke functies er allemaal zijn aangeroepen voordat ie daar kwam. Misschien dat je daar conclusies uit kan trekken.

Als jij niet meer informatie kan geven denk ik niet dat er iemand zomaar met een antwoord komt. Ik verwacht persoonlijk niet dat het een bugje is en de componenten, maar een probleem in jullie hele grote project. Iets met threads misschien?

/edit
Eigenlijk wordt meestal Indy of ICS gebruikt. Ook gratis, maar worden als beter/stabieler en uitgebreider gezien.

[ Voor 12% gewijzigd door LordLarry op 08-05-2004 23:32 ]

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Op welke poorten draaien alle genoemde sockets?

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-05 23:27

Tomatoman

Fulltime prutser

Probeer het eens met een simpele verbinding tussen client en server zonder dat daar routers en firewalls tussen hangen. Dat kan helpen om het probleem te localiseren.

Een tip: laat iemand die goed Engels schrijft de foutmeldingen in de applicatie maken :). Nog een tip: gebruik resourcestrings in plaats van string constantes verspreid door alle broncode.

[ Voor 23% gewijzigd door Tomatoman op 09-05-2004 13:24 ]

Een goede grap mag vrienden kosten.


Verwijderd

Topicstarter
sckAuthentication draait op 1972 and sckFindClient en SckFindServer op 3000

en sckAuthentication Heeft gewerkt voordat ik sckFind heb toegevoegd

na het toevoegen doet het raar

maar ik zal effe via call stack checken of ik de probleem kan localiseren
en ik heb aleen maar in simpele verbindingen getest zonder routers and switch

ik zal wel checke wat resourcestrings zijn en probeer dat te gebruiken :)

bedankt voor de tips ik zal vandaag debuggen en jullie laten weten of ik iets tegen kom :)

Verwijderd

Verwijderd schreef op 09 mei 2004 @ 16:11:
sckAuthentication draait op 1972 and sckFindClient en SckFindServer op 3000

en sckAuthentication Heeft gewerkt voordat ik sckFind heb toegevoegd
en sckFind? Op welke poort staat die?
Pagina: 1