[EMAIL PROTECTED] wrote: > Hello: > This may sound stupid, but could you verify that > the OnSessionAvailable event is actually wired > (assigned to the property)? It seems strange that it > is not called, yet OnDataSent is.
OnSessionAvailable is called only on listening TWSockets, as I read the post it deals with a client (connecting party). -- Arno Garrels > > Also, what happens when you try to send a second > time (or does it even try)? Do you get a "Component > already connected" error or something like that? > > If your burst messages are short as your example > implies, then there is really no reason to do this on > a separate thread; it will actually be slower to > spawn a new thread and execute it than to just > re-connect and call SendStr. > > -dZ. > > >> ------- Original Message ------- >>> From : Pete Williams[mailto:[EMAIL PROTECTED] >> Sent : 11/28/2007 1:49:27 PM >> To : twsocket@elists.org >> Cc : >> Subject : RE: Re: [twsocket] I need some help understanding TWsocket >> states >> > >Thank you to the two people who replied. I got > really good advice which > I followed and this seems to have given me a working > server, but I still > have client problems. > > - I created a message-pump in a distinct thread for > the DLL server, as > advised. > - Both client and server were changed to async > programming style, and > this worked for the server. > > I have another problem though, which seems stange, > and may be related to > timing (or something). > > My client wants to sometimes connect to the server, > send a few lines of > data, and then disconnect. > > When I want to send data this is what I do > > procedure sendData(asMessage: string); > begin > mystringlist.add(asMessage); > if mytwsocket.state <> wsConnected then > begin > mytwsocket.addr := '127.0.0.1'; // client and > server are on same > machine > mytwsocket.port := '17072'; > mytwsocket.connect(); > end; > end; > > Then I have handlers for OnSessionAvailable and > OnDataSent. > OnSessionAvailable doesn't seem to get called ever. > > In OnDataSent I do this > > begin > if mystringlist.count > 0 then > begin > mytwsocket.sendStr(mystringlist[0]+#$D#$A); > mystringlist.delete(0); // we've sent this one > end else > begin > mytwsocket.close(); // no more data to send, > so close > end; > end; > > Here's what I've observed. The client can send once, > and that's it. I > can't send twice. However, if I put a breakpoint at > the end of the > function that connects to the server,it works - > almost like there is > some kind of timing issue. > > I'm working on Windows 2003. > > Should I use threads for my clients as well? Any > advice is greatly received. > > > Wilfried Mestdagh wrote: >> Hello Pete, >> >> >>> if myclient.state <> wsConnected then >>> begin >>> myclient.connect; >>> loop for 5 seconds begin >>> >> >> You have to think async. TWSocket uses events. > think on events as a >> OnClick event of a butten. You don't write loops to wait until a user >> click a button. So you have to change to: >> >> MyClient.Connect; // that's all >> >> and in the OnSessionAvailable event you start do >> TWSocket(Sender).sendstr(thedatastring); >> >> >>> myclient.processMessages; >>> >> >> General a very bad idea to call the message pump > yourself. >> >> >>> myclient.close(); >>> >> >> If your client has send all the data then you still > dont know if the >> other end has received an handled the data. if you > design your proto >> yourself then the receiver can close. if you dont > then call >> ShutDown(1); >> >> >>> myserver.OnsessionAvailable >>> begin >>> myserversocket.dup(myserversocket.accept()); >>> end; >>> >> >> Better to use TWSocketSer4ver. >> >> --- >> Rgds, Wilfried [TeamICS] >> http://www.overbyte.be/eng/overbyte/teamics.html >> http://www.mestdagh.biz >> >> Monday, November 26, 2007, 18:58, Pete Williams wrote: >> >> >>> Hello again >>> >> >> >>> I'm trying to write a very simple client/server socket application >>> using TWSocket. However, I think I may not understand the use of >>> states correctly. >>> >> >> >>> What I want is for the client to connect to the server, send some >>> data, and then disconnect. If it has more data to send, I want it >>> to connect again and repeat the process. >>> >> >> >>> Here's what is happening at the moment. The client can connect to >>> the server and successfully send as much data as it chooses. >>> However, once it disconnects it can't reconnect. >>> >> >> >>> The code on the client is broadly thus (using a > pseudo code): >>> >> >> >>> if myclient.state <> wsConnected then >>> begin >>> myclient.connect; >>> loop for 5 seconds begin >>> myclient.processMessages; >>> if myclient.state = wsConnected then >>> begin >>> lbConnected := TRUE: >>> break; >>> end; >>> end loop; >>> end else >>> lbConnected := TRUE; >>> >> >> >>> if lbConnected then >>> myclient.sendstr(thedatastring); >>> >> >> >>> myclient.close(); >>> >> >> >>> On the server, this is what I have: >>> >> >> >>> myserver.OnsessionAvailable >>> begin >>> myserversocket.dup(myserversocket.accept()); >>> end; >>> >> >> >>> I'm also handling the OnDataAvailable event, and this works fine - >>> but only the first time (or at least until the client > disconnects). >>> >> >> >>> I've tried recalling listen() in the OnSessionClosed event, but it >>> does nothing. >>> >> >> >>> The state of the client on the 2nd attempt to reconnect remains at >>> closed. >>> >> >> >>> If anyone can point me in the right direction I'd be grateful. >>> Maybe I need some form of clean-up on the server after the > disconnect? >>> >> >> >>> Cheers, >>> >> >> > > -- > To unsubscribe or change your settings for TWSocket > mailing list > please goto > http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket > > Visit our website at http://www.overbyte.be -- To unsubscribe or change your settings for TWSocket mailing list please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be