Main Board > Programming

Reading simple data from a TCP channel

(1/2) > >>

Hello everyone, just a simple question.

I have an incoming TCP data stream I want to capture.  For example port 9004.

I've created a simple incoming server routine.  Not sure if I needed KEEPALIVE but

let TCP=unt; open (TCP,bsz=4096,err=ERR_PORT)"[tcp];9004;KEEPALIVE"
read record (TCP,err=ERR_READ)A$
print "Got: ",A$

Similarly I ran a linux "nc capture command" capturing data from another port which has the same data being sent to it.

What I am noticing is occasionally the PVX program does something like this:

Almost like a terminator character is received on the port and it registers part of the data then it continues on the next read fine.  So I would have to concatenate the data.

The nc command however does not break apart any data.

I am just wondering if I need to change anything in this routine.  Thanks.

Mike King:
You have specified a blocking factor of 4K so every time you read the most you will get back is 4K regardless of how much has been received.

Your PRINT command will then insert a visible line break on the output -- the line feed is not in the data but simply a result of the PRINT statement not having a trailing comma..


--- Code: ---  let TCP=unt; open (TCP,bsz=4096,err=ERR_PORT)"[tcp];9004;KEEPALIVE"
  read record (TCP,err=ERR_READ)A$
  print A$,
  goto READ_NEXT
--- End code ---

Thanks Mike but this data is coming in very slow like as you can see by the time stamp.  Every few seconds very small data chunks? 

Let me resend with this picture I had this code with my time stamp

0040 let TCP=unt; open (TCP,bsz=4096,err=ERR_PORT)"[tcp];9004;KEEPALIVE"
0050 read record (TCP,err=ERR_READ)A$
0060 let TIME$=dte(0:%DATTIM_MSK$)
0070 print TIME$+"   Got: ",A$

Mike King:
Yes but TCP is a streaming transmission so arrival times are never assured.  A transmission error somewhere along the stream can cause a delay/small packet at any time.

Also, if you receiving small intermittent packets I would suggest you add the option NODELAY to disable the Nagles algorithm on the connection, it is normally enabled on TCP. (See Nagles Algorithm at  It also possible the sender may need to disable the algorithm to provide an even flow of data.

All that being said, did the example I posted with the trailing comma resolve what you seeing?


[0] Message Index

[#] Next page

Go to full version