Re: [twsocket] TWSocket stops receiving where TClientSocket just keeps going

2009-06-05 Thread Anton Sviridov
Maybe you should create an exception handler by assigning OnBgException event - 
unhandled excepion is the frequent reason of strange behaviors in async 
applications. You can also indeed sniff the data transferred - I recommend 
SmSniff, which is as simple as it could be.

-- 
Anton
--
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


Re: [twsocket] TWSocket stops receiving where TClientSocket just keeps going

2009-06-05 Thread robertoschler

Hello Wilfried,

Thank you for your reply.

It appears to be something with my application but I don't know what.  I 
grabbed your SocketSpy program and set it up to act as a proxy between the 
streaming image server and my program.  Your log kept accumulating incoming 
data from the server while my app, which was connected to SocketSpy as an 
incoming client, stopped firing DataAvailable() events after a certain number 
of received frames, just as I described before.

Now some details.  My app is also a proxy server like SocketSpy.  I looked at 
the SocketSpy code and here is the only crucial difference I could find between 
your code and mine.  When your server socket accepts a connection you create a 
client socket that creates it's own REMOTE client socket when a new connection 
is accepted.  This REMOTE client socket immediately connects to the other end 
other end of the proxy link.  From the client socket's Data Available handler 
you immediately send the data to the REMOTE socket and vice-a-versa.

In my program when I accept a new connection with TWSocketServer I just create 
a client socket.  This results in a message being posted to the host form 
telling it a new client has been connected and the current connection count.  
If the client count is now greater than 0 for the first time, a single plain 
vanilla TWSocket control then connects to the streaming image server completing 
the other end of my proxy link.  (Details on why I use this architecture are 
below).

To facilitate data transfer I use windows messages posted to the host form.  
When *any* of the Clients to TWSocketServer fire the Data Available event, I 
post a message to the host form notifying it of the new data.  The host form 
then calls SendStr() on the single plain vanilla TWSocket control connected to 
the image streaming server.  Conversely, when the plain vanilla TWSocket 
control fires its Data Available event, a message is posted to the host form 
who then sends the data to ALL clients connected to the TWSocketServer instance.

I do this so I can have a one-to-many proxy link, where multiple clients can 
receive the image stream from the image server.  Also, I use the windows 
messaging technique for safety purposes so that I am not trying to send large 
amounts of data to the other end of the proxy link from within the Data 
Available handler itself.  By using windows messages to trigger the sends I am 
moving the send outside the scope of the Data Available handler.

Note, I have code in *every* event handler for all sockets, including for the 
Error and BgException events, and I am not getting any error reports.  I also 
check all ErrorCode's on those events that provided that parameter, and report 
any non zero code ErrorCode occurrences.  There have been no such occurrences.

Do you have any ideas for tests or tips on trying to diagnose why the Data 
Available event on the plain vanilla TWSocket component connected to the image 
streaming server would go dead after receiving successfully for a short time?

Thanks for your help,
Robert


--- On Fri, 6/5/09, Wilfried Mestdagh wilfr...@mestdagh.biz wrote:

 From: Wilfried Mestdagh wilfr...@mestdagh.biz
 Subject: Re: [twsocket] TWSocket stops receiving where TClientSocket just 
 keeps going
 To: ICS support mailing twsocket@elists.org
 Date: Friday, June 5, 2009, 3:30 AM
 Hello Robert,
 
 To be absolutely sure if it is the sending or receiving
 application I
 suggest you put SocketSpy between it. You find it on user
 made page.
 Then we are sure in wich application is a bug and we can
 search deeper.
 
 ---
 Rgds, Wilfried [TeamICS]
 http://www.overbyte.be/eng/overbyte/teamics.html
 http://www.mestdagh.biz
 
 Thursday, June 4, 2009, 17:58, robertoschler wrote:
 
 
  I have an application that opens an outgoing
 connection to an MJPEG
  streaming server (server push using MIME multi-part
 boundary method). 
  With my TWSocket code, I connect fine and then I get
 an arbitrary
  number of frames until the connection appears to stop
 receiving data,
  permanently.  The data available event never
 fires again until I close
  the connection and reconnect.  This happens
 pretty quick.  Sometimes
  it's a small number of frames (e.g. - 1 to 7). 
 Other times I get a
  nice chunk of about 30 to 50 frames, but always the
 data reception
  just dries up.
 
  To make sure the server was not stopping transmission,
 I coded up a
  simple example using the included Delphi 6
 TClientSocket component.  I
  set it to non-blocking mode which is how I use
 TWSocket too.  It did
  not exhibit the problem.  It kept receiving
 frames until I shut down
  the connection.
 
  How can I diagnose and or fix the problem with my
 TWSocket code?  I would prefer to use that instead.
 
  Note: I am using Delphi 6 Pro and ICS version 5.
 
  Thanks,
  Robert
 
 
       
  --
  To unsubscribe or change your settings for TWSocket
 mailing list
  please goto http://lists.elists.org/cgi-bin/mailman

Re: [twsocket] TWSocket stops receiving where TClientSocket just keeps going

2009-06-05 Thread robertoschler

Hello again Wilfried,

A little extra data.  My Data Available event handler grabs the number of 
waiting bytes in the queue from the RcvdCount property (I use it to size the 
receive buffer).  If the byte count is 0, I just ignore the Data Available 
event.  That is, I do nothing.  I just added code to the Data Available event 
handler to add a line to my session log whenever I get a Data Available event 
where the RcvdCount is 0.  I'm getting a ton of Data Available events where the 
RcvdCount is 0 on the plain vanilla TWSocket instance connected to the image 
streaming server.  Any ideas what could cause that to happen?

Thanks,
Robert

--- On Fri, 6/5/09, robertoschler robertosch...@yahoo.com wrote:

 From: robertoschler robertosch...@yahoo.com
 Subject: Re: [twsocket] TWSocket stops receiving where TClientSocket just 
 keeps going
 To: ICS support mailing twsocket@elists.org
 Date: Friday, June 5, 2009, 7:43 PM
 
 Hello Wilfried,
 
 Thank you for your reply.
 
 It appears to be something with my application but I don't
 know what.  I grabbed your SocketSpy program and set it
 up to act as a proxy between the streaming image server and
 my program.  Your log kept accumulating incoming data
 from the server while my app, which was connected to
 SocketSpy as an incoming client, stopped firing
 DataAvailable() events after a certain number of received
 frames, just as I described before.
 
 Now some details.  My app is also a proxy server like
 SocketSpy.  I looked at the SocketSpy code and here is
 the only crucial difference I could find between your code
 and mine.  When your server socket accepts a connection
 you create a client socket that creates it's own REMOTE
 client socket when a new connection is accepted.  This
 REMOTE client socket immediately connects to the other end
 other end of the proxy link.  From the client socket's
 Data Available handler you immediately send the data to the
 REMOTE socket and vice-a-versa.
 
 In my program when I accept a new connection with
 TWSocketServer I just create a client socket.  This
 results in a message being posted to the host form telling
 it a new client has been connected and the current
 connection count.  If the client count is now greater
 than 0 for the first time, a single plain vanilla TWSocket
 control then connects to the streaming image server
 completing the other end of my proxy link.  (Details on
 why I use this architecture are below).
 
 To facilitate data transfer I use windows messages posted
 to the host form.  When *any* of the Clients to
 TWSocketServer fire the Data Available event, I post a
 message to the host form notifying it of the new data. 
 The host form then calls SendStr() on the single plain
 vanilla TWSocket control connected to the image streaming
 server.  Conversely, when the plain vanilla TWSocket
 control fires its Data Available event, a message is posted
 to the host form who then sends the data to ALL clients
 connected to the TWSocketServer instance.
 
 I do this so I can have a one-to-many proxy link, where
 multiple clients can receive the image stream from the image
 server.  Also, I use the windows messaging technique
 for safety purposes so that I am not trying to send large
 amounts of data to the other end of the proxy link from
 within the Data Available handler itself.  By using
 windows messages to trigger the sends I am moving the send
 outside the scope of the Data Available handler.
 
 Note, I have code in *every* event handler for all sockets,
 including for the Error and BgException events, and I am not
 getting any error reports.  I also check all
 ErrorCode's on those events that provided that parameter,
 and report any non zero code ErrorCode occurrences. 
 There have been no such occurrences.
 
 Do you have any ideas for tests or tips on trying to
 diagnose why the Data Available event on the plain vanilla
 TWSocket component connected to the image streaming server
 would go dead after receiving successfully for a short
 time?
 
 Thanks for your help,
 Robert
 
 
 --- On Fri, 6/5/09, Wilfried Mestdagh wilfr...@mestdagh.biz
 wrote:
 
  From: Wilfried Mestdagh wilfr...@mestdagh.biz
  Subject: Re: [twsocket] TWSocket stops receiving where
 TClientSocket just keeps going
  To: ICS support mailing twsocket@elists.org
  Date: Friday, June 5, 2009, 3:30 AM
  Hello Robert,
  
  To be absolutely sure if it is the sending or
 receiving
  application I
  suggest you put SocketSpy between it. You find it on
 user
  made page.
  Then we are sure in wich application is a bug and we
 can
  search deeper.
  
  ---
  Rgds, Wilfried [TeamICS]
  http://www.overbyte.be/eng/overbyte/teamics.html
  http://www.mestdagh.biz
  
  Thursday, June 4, 2009, 17:58, robertoschler wrote:
  
  
   I have an application that opens an outgoing
  connection to an MJPEG
   streaming server (server push using MIME
 multi-part
  boundary method). 
   With my TWSocket code, I connect fine and then I
 get
  an arbitrary

Re: [twsocket] TWSocket stops receiving where TClientSocket just keeps going

2009-06-05 Thread robertoschler

Hello Wilfried,

Well now I know the problem.  The Overbyte web site says RcvdCount is 
unreliable.  Their example shows the use of a 8192 size buffer in Data 
Available to receive whatever data may be there and to check the return of the 
Receive() call to know how much data was delivered.  I assume this means that 
the maximum amount of data received during any Data Available event is 8192.

It's amazing how so small a thing can cost you so much time.  I'm going to 
recode and retest now.

Thanks,
Robert

--- On Fri, 6/5/09, robertoschler robertosch...@yahoo.com wrote:

 From: robertoschler robertosch...@yahoo.com
 Subject: Re: [twsocket] TWSocket stops receiving where TClientSocket just 
 keeps going
 To: ICS support mailing twsocket@elists.org
 Date: Friday, June 5, 2009, 8:10 PM
 
 Hello again Wilfried,
 
 A little extra data.  My Data Available event handler
 grabs the number of waiting bytes in the queue from the
 RcvdCount property (I use it to size the receive
 buffer).  If the byte count is 0, I just ignore the
 Data Available event.  That is, I do nothing.  I
 just added code to the Data Available event handler to add a
 line to my session log whenever I get a Data Available event
 where the RcvdCount is 0.  I'm getting a ton of Data
 Available events where the RcvdCount is 0 on the plain
 vanilla TWSocket instance connected to the image streaming
 server.  Any ideas what could cause that to happen?
 
 Thanks,
 Robert
 
 --- On Fri, 6/5/09, robertoschler robertosch...@yahoo.com
 wrote:
 
  From: robertoschler robertosch...@yahoo.com
  Subject: Re: [twsocket] TWSocket stops receiving where
 TClientSocket just keeps going
  To: ICS support mailing twsocket@elists.org
  Date: Friday, June 5, 2009, 7:43 PM
  
  Hello Wilfried,
  
  Thank you for your reply.
  
  It appears to be something with my application but I
 don't
  know what.  I grabbed your SocketSpy program and set
 it
  up to act as a proxy between the streaming image
 server and
  my program.  Your log kept accumulating incoming
 data
  from the server while my app, which was connected to
  SocketSpy as an incoming client, stopped firing
  DataAvailable() events after a certain number of
 received
  frames, just as I described before.
  
  Now some details.  My app is also a proxy server
 like
  SocketSpy.  I looked at the SocketSpy code and here
 is
  the only crucial difference I could find between your
 code
  and mine.  When your server socket accepts a
 connection
  you create a client socket that creates it's own
 REMOTE
  client socket when a new connection is accepted. 
 This
  REMOTE client socket immediately connects to the other
 end
  other end of the proxy link.  From the client
 socket's
  Data Available handler you immediately send the data
 to the
  REMOTE socket and vice-a-versa.
  
  In my program when I accept a new connection with
  TWSocketServer I just create a client socket.  This
  results in a message being posted to the host form
 telling
  it a new client has been connected and the current
  connection count.  If the client count is now
 greater
  than 0 for the first time, a single plain vanilla
 TWSocket
  control then connects to the streaming image server
  completing the other end of my proxy link.  (Details
 on
  why I use this architecture are below).
  
  To facilitate data transfer I use windows messages
 posted
  to the host form.  When *any* of the Clients to
  TWSocketServer fire the Data Available event, I post
 a
  message to the host form notifying it of the new
 data. 
  The host form then calls SendStr() on the single
 plain
  vanilla TWSocket control connected to the image
 streaming
  server.  Conversely, when the plain vanilla TWSocket
  control fires its Data Available event, a message is
 posted
  to the host form who then sends the data to ALL
 clients
  connected to the TWSocketServer instance.
  
  I do this so I can have a one-to-many proxy link,
 where
  multiple clients can receive the image stream from the
 image
  server.  Also, I use the windows messaging technique
  for safety purposes so that I am not trying to send
 large
  amounts of data to the other end of the proxy link
 from
  within the Data Available handler itself.  By using
  windows messages to trigger the sends I am moving the
 send
  outside the scope of the Data Available handler.
  
  Note, I have code in *every* event handler for all
 sockets,
  including for the Error and BgException events, and I
 am not
  getting any error reports.  I also check all
  ErrorCode's on those events that provided that
 parameter,
  and report any non zero code ErrorCode occurrences. 
  There have been no such occurrences.
  
  Do you have any ideas for tests or tips on trying to
  diagnose why the Data Available event on the plain
 vanilla
  TWSocket component connected to the image streaming
 server
  would go dead after receiving successfully for a
 short
  time?
  
  Thanks for your help,
  Robert
  
  
  --- On Fri, 6/5/09

Re: [twsocket] TWSocket stops receiving where TClientSocket just keeps going

2009-06-05 Thread robertoschler

Hello Wilfried,

Just for the record everything works fine.  Hopefully someone else can benefit 
from my little journey here.  I no longer check RcvdCount and simply check the 
byte count returned by ReceiveStr.  It works great.

This is a relief because ICS is my preferred choice for socket work.

Thanks for listening,
Robert

--- On Fri, 6/5/09, robertoschler robertosch...@yahoo.com wrote:

 From: robertoschler robertosch...@yahoo.com
 Subject: Re: [twsocket] TWSocket stops receiving where TClientSocket just 
 keeps going
 To: ICS support mailing twsocket@elists.org
 Date: Friday, June 5, 2009, 8:40 PM
 
 Hello Wilfried,
 
 Well now I know the problem.  The Overbyte web site
 says RcvdCount is unreliable.  Their example shows the
 use of a 8192 size buffer in Data Available to receive
 whatever data may be there and to check the return of the
 Receive() call to know how much data was delivered.  I
 assume this means that the maximum amount of data received
 during any Data Available event is 8192.
 
 It's amazing how so small a thing can cost you so much
 time.  I'm going to recode and retest now.
 
 Thanks,
 Robert
 
 --- On Fri, 6/5/09, robertoschler robertosch...@yahoo.com
 wrote:
 
  From: robertoschler robertosch...@yahoo.com
  Subject: Re: [twsocket] TWSocket stops receiving where
 TClientSocket just keeps going
  To: ICS support mailing twsocket@elists.org
  Date: Friday, June 5, 2009, 8:10 PM
  
  Hello again Wilfried,
  
  A little extra data.  My Data Available event
 handler
  grabs the number of waiting bytes in the queue from
 the
  RcvdCount property (I use it to size the receive
  buffer).  If the byte count is 0, I just ignore the
  Data Available event.  That is, I do nothing.  I
  just added code to the Data Available event handler to
 add a
  line to my session log whenever I get a Data Available
 event
  where the RcvdCount is 0.  I'm getting a ton of Data
  Available events where the RcvdCount is 0 on the
 plain
  vanilla TWSocket instance connected to the image
 streaming
  server.  Any ideas what could cause that to happen?
  
  Thanks,
  Robert
  
  --- On Fri, 6/5/09, robertoschler robertosch...@yahoo.com
  wrote:
  
   From: robertoschler robertosch...@yahoo.com
   Subject: Re: [twsocket] TWSocket stops receiving
 where
  TClientSocket just keeps going
   To: ICS support mailing twsocket@elists.org
   Date: Friday, June 5, 2009, 7:43 PM
   
   Hello Wilfried,
   
   Thank you for your reply.
   
   It appears to be something with my application
 but I
  don't
   know what.  I grabbed your SocketSpy program and
 set
  it
   up to act as a proxy between the streaming image
  server and
   my program.  Your log kept accumulating
 incoming
  data
   from the server while my app, which was connected
 to
   SocketSpy as an incoming client, stopped firing
   DataAvailable() events after a certain number of
  received
   frames, just as I described before.
   
   Now some details.  My app is also a proxy
 server
  like
   SocketSpy.  I looked at the SocketSpy code and
 here
  is
   the only crucial difference I could find between
 your
  code
   and mine.  When your server socket accepts a
  connection
   you create a client socket that creates it's own
  REMOTE
   client socket when a new connection is
 accepted. 
  This
   REMOTE client socket immediately connects to the
 other
  end
   other end of the proxy link.  From the client
  socket's
   Data Available handler you immediately send the
 data
  to the
   REMOTE socket and vice-a-versa.
   
   In my program when I accept a new connection
 with
   TWSocketServer I just create a client socket. 
 This
   results in a message being posted to the host
 form
  telling
   it a new client has been connected and the
 current
   connection count.  If the client count is now
  greater
   than 0 for the first time, a single plain
 vanilla
  TWSocket
   control then connects to the streaming image
 server
   completing the other end of my proxy link. 
 (Details
  on
   why I use this architecture are below).
   
   To facilitate data transfer I use windows
 messages
  posted
   to the host form.  When *any* of the Clients to
   TWSocketServer fire the Data Available event, I
 post
  a
   message to the host form notifying it of the new
  data. 
   The host form then calls SendStr() on the single
  plain
   vanilla TWSocket control connected to the image
  streaming
   server.  Conversely, when the plain vanilla
 TWSocket
   control fires its Data Available event, a message
 is
  posted
   to the host form who then sends the data to ALL
  clients
   connected to the TWSocketServer instance.
   
   I do this so I can have a one-to-many proxy
 link,
  where
   multiple clients can receive the image stream
 from the
  image
   server.  Also, I use the windows messaging
 technique
   for safety purposes so that I am not trying to
 send
  large
   amounts of data to the other end of the proxy
 link
  from
   within the Data Available handler