Network data server/client SendNetworkString/ReceiveNetworkData

Just starting out? Need help? Post your questions and find answers here.
User avatar
mk-soft
Always Here
Always Here
Posts: 5335
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by mk-soft »

How good that I have already written them. But no one reads them :wink:
mk-soft wrote: ↑Sat Jan 07, 2023 12:24 pm This is the same in all programming languages and is a feature of network communication.
PureBasic uses the standard socket interface in all three OS.

SendNetworkData/String passes the data to the send buffer. The return value indicates how many bytes were passed. Not that the data has been sent.

After the event #PB_NetworkEvent_Data, ReceiveNetworkData fetches the data accumulated until then from the receive buffer. Each connection has its own receive buffer.

For UDP the packet size is set to 2048 bytes. With TCP, the data is divided into individual packets to 1500 (somewhat smaller over the Internet). The sum of the packets is limited to 64KB and it is guaranteed for the 64KB that they arrive in the correct order but not for completeness.
How good that I already have everything ready as modules for myself. For TCP/IP with header data or UDP text data with start (#STX$) and end (#ETX$) characters for separating the data.
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
User avatar
the.weavster
Addict
Addict
Posts: 1537
Joined: Thu Jul 03, 2003 6:53 pm
Location: England

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by the.weavster »

@mk-soft
You seemed to be suggesting TCP could not reassemble messages > 64kb but I don't believe that's correct.
When will a TCP network packet be fragmented at the application layer?
This (de)fragmentation happens in the TCP layer. In the application layer there are no more packets. TCP presents a contiguous data stream to the application.
source
What I was asking NickTheQuick was if I sent the massage as snippets ( any of which could still be > 64kb ) will TCP only reassemble the snippets.
User avatar
mk-soft
Always Here
Always Here
Posts: 5335
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by mk-soft »

Edit
In the application layer, you must limit the data itself to 64KB blocks.

ReceiveNetworkData returns the receive buffer. So it can also be that you first get the first 1500 bytes of the 64KB and then the rest of the 64KB that you sent as a 64 KB block. Possibly already the data from the next block.
You have to intercept the compilation of the data. Therefore work with headers.

Example: Modbus/TCP header and data

Word TransactionID
Word ProtocolID
Word DataLen
Data like Modbus/RTU without CRC

P.S.
I have tested it again with my programme.
Only 65535 bytes (64KB - 1) are possible.
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
User avatar
HeX0R
Addict
Addict
Posts: 979
Joined: Mon Sep 20, 2004 7:12 am
Location: Hell

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by HeX0R »

There is no 64k limit on the application layer side (talking about TCP/IP now), you'll get the max size of packets from a connected socket with #SO_MAX_MSG_SIZE

Code: Select all

#SO_MAX_MSG_SIZE = $2003
maxs.i           = 0
rlength.i        = SizeOf(INTEGER)
getsockopt_(ConnectionID(ClientID), #SOL_SOCKET, #SO_MAX_MSG_SIZE, @maxs, @rlength)
Debug maxs
But sure, you have to work with headers anyway.
And, what people are often doing wrong:
Handle the result of SendNetworkData() correctly!
User avatar
the.weavster
Addict
Addict
Posts: 1537
Joined: Thu Jul 03, 2003 6:53 pm
Location: England

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by the.weavster »

Below is a network server. It has a global variable SendSize which you can use to set the size of the data you wish it to send to the client. I have set it to 250,000 just so we're testing with a number > 65,535

I have also included a client which requests the data from the server and displays the size of the response.

I'm running this on Pop!_OS and I'm not seeing any restriction on the size of data I can send and receive.

Server:

Code: Select all

EnableExplicit

Enumeration
  #frmMain
  #frmMain_edtNarrative
EndEnumeration

Enumeration server
  #NetworkServer
EndEnumeration

Global SendSize = 250000
Global Port.i = 8081
Global BufferSize.i = 2048
Global *Buffer = AllocateMemory(BufferSize)
Global ChunkSize.i = 0
Global NewMap MyMap.s()

Procedure.s GetIP()
  Protected sIP.s = "127.0.0.1"
  If ExamineIPAddresses()
    Repeat
      Protected IP = NextIPAddress()
      If IP
        sIP = IPString(IP) 
      EndIf
    Until IP = 0
  EndIf
  ProcedureReturn sIP
EndProcedure

Procedure AddIncomingData(nClientId, sData.s)
  If Not FindMapElement(MyMap(), Str(nClientId))
    AddMapElement(MyMap(), Str(nClientId))
  EndIf
  MyMap() + sData
EndProcedure

Procedure onRequest(nClientId)
  Protected sMode.s = "header_f"
  If FindMapElement(MyMap(), Str(nClientId))
    sMode = MyMap()
    DeleteMapElement(MyMap(), Str(nClientId))
  EndIf
  Protected sResponse.s = ""
  sResponse = RSet(sResponse, SendSize, "x")
  Protected nContentLength = StringByteLength(sResponse, #PB_UTF8)
  If FindString(sMode, "header_t") > 0
    sResponse = "HTTP/1.1 200 OK" + #CRLF$ +
                "Content-Type: text/plain" + #CRLF$ +
                "Content-Length: " + Str(nContentLength) + 
                #CRLF$ + #CRLF$ + sResponse
  EndIf
  AddGadgetItem(#frmMain_edtNarrative, -1, "Content-Length " + Str(nContentLength) + " bytes ...")
  SendNetworkString(nClientId, sResponse, #PB_UTF8)
  AddGadgetItem(#frmMain_edtNarrative, -1, "Done" + #CRLF$)
EndProcedure

Procedure frmMain_Open()
  Protected sTitle.s = "Listening at " + 
                       GetIP() + ":" + 
                       Str(Port)
  If OpenWindow(#frmMain, 20, 20, 600, 300, sTitle)
    EditorGadget(#frmMain_edtNarrative, 10, 10, 580, 280)
  EndIf
EndProcedure

If Not CreateNetworkServer(#NetworkServer, Port)
  Debug "Failed to create network server. Is port " + Str(Port) + " in use?"
  End
EndIf

frmMain_Open()

Define.i ServerEvent, WindowEvent, ClientID
Define.s sRequest

Repeat
  WindowEvent = WaitWindowEvent(20)
  ServerEvent = NetworkServerEvent(#NetworkServer)
  If ServerEvent
    ClientID = EventClient()
    Select ServerEvent   
      Case #PB_NetworkEvent_Connect
        
      Case #PB_NetworkEvent_Disconnect
        
      Case #PB_NetworkEvent_Data
        ChunkSize = ReceiveNetworkData(ClientID, *Buffer, BufferSize)
        AddIncomingData(ClientID, PeekS(*Buffer, ChunkSize, #PB_UTF8))
        If ChunkSize < BufferSize
          onRequest(ClientID)
        EndIf
    EndSelect
  Else
    Delay(20)
  EndIf  
Until WindowEvent = #PB_Event_CloseWindow
    
CloseNetworkServer(#NetworkServer)
Client:

Code: Select all

EnableExplicit

Enumeration
  #frmMain
  #frmMain_btnNoHeader
  #frmMain_btnHeader
  #frmMain_edtNarrative
EndEnumeration

Global IP.s = "127.0.0.1"               
Global Port = 8081

Global BufferSize = 2048
Global *Buffer = AllocateMemory(BufferSize)

Procedure frmMain_Open()
  If OpenWindow(#frmMain, 20, 20, 600, 300, "Client")
    ButtonGadget(#frmMain_btnNoHeader, 10, 10, 100, 25, "Plain")
    ButtonGadget(#frmMain_btnHeader, 120, 10, 100, 25, "HTTP")
    EditorGadget(#frmMain_edtNarrative, 10, 40, 580, 250)
  EndIf
EndProcedure

Procedure onBtn_Header()
  Protected req = HTTPRequest(#PB_HTTP_Get, "http://" + IP + ":" + Str(Port) + "/header_t")
  If req
    AddGadgetItem(#frmMain_edtNarrative, -1, HTTPInfo(req, #PB_HTTP_Headers))
    FinishHTTP(req)
  Else  
    AddGadgetItem(#frmMain_edtNarrative, -1, "HTTP request failed")
  EndIf
EndProcedure

Procedure onBtn_NoHeader()
  Protected Quit = 0
  Protected ChunkSize = 0
  Protected TotalBytes = 0
  Protected ConnectionID = OpenNetworkConnection(IP.s, Port)
  If ConnectionID
    SendNetworkString(ConnectionID, "header_f", #PB_UTF8)
    Repeat
      Protected ClientEvent = NetworkClientEvent(ConnectionID)
      If clientEvent
        Select ClientEvent
          Case #PB_NetworkEvent_Data
            ChunkSize = ReceiveNetworkData(ConnectionID, *Buffer, BufferSize)
            TotalBytes + ChunkSize
            If ChunkSize < BufferSize
              AddGadgetItem(#frmMain_edtNarrative, -1, "Received " + Str(TotalBytes) + " bytes")
              Quit = 1
            EndIf
          Case #PB_NetworkEvent_Disconnect
            AddGadgetItem(#frmMain_edtNarrative, -1, "Server closed the connection")
            Quit = 1
        EndSelect
      EndIf
    Until Quit = 1
    CloseNetworkConnection(ConnectionID) 
  Else
    AddGadgetItem(#frmMain_edtNarrative, -1, "Connection failed")
  EndIf
EndProcedure

Procedure Events_Gadget()
  Select EventGadget()
    Case #frmMain_btnHeader
      onBtn_Header()
    Case #frmMain_btnNoHeader
      onBtn_NoHeader()
  EndSelect
EndProcedure

BindEvent(#PB_Event_Gadget, @Events_Gadget())

frmMain_Open()
Define WindowEvent
Repeat
  WindowEvent = WaitWindowEvent(20)
Until WindowEvent = #PB_Event_CloseWindow
* Edit *
On my PC the largest SendSize that worked reliably seemed to be 5,000,000 bytes.

Out of curiosity I might tweak the server to respond using chunked transfer encoding and see if there's a limit to PB's HTTPRequest() πŸ€”οΈ
User avatar
the.weavster
Addict
Addict
Posts: 1537
Joined: Thu Jul 03, 2003 6:53 pm
Location: England

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by the.weavster »

Using "Transfer-Encoding: chunked" and HTTPRequest() we can handle properly big stuff 8)

Server:

Code: Select all

EnableExplicit

Enumeration
  #frmMain
  #frmMain_edtNarrative
EndEnumeration

Enumeration server
  #NetworkServer
EndEnumeration

Global SendSize = 50000000 ; for demo make exactly divisible by 1000
Global Port.i = 8081
Global BufferSize.i = 2048
Global *Buffer = AllocateMemory(BufferSize)
Global ChunkSize.i = 0
Global NewMap MyMap.s()

Procedure.s GetIP()
  Protected sIP.s = "127.0.0.1"
  If ExamineIPAddresses()
    Repeat
      Protected IP = NextIPAddress()
      If IP
        sIP = IPString(IP) 
      EndIf
    Until IP = 0
  EndIf
  ProcedureReturn sIP
EndProcedure

Procedure AddIncomingData(nClientId, sData.s)
  If Not FindMapElement(MyMap(), Str(nClientId))
    AddMapElement(MyMap(), Str(nClientId))
  EndIf
  MyMap() + sData
EndProcedure

Procedure SendChunk(nClientId, txt$, nSize)
  If nSize = 0 : ProcedureReturn : EndIf ; don't want to SendEOT by mistake
  Protected hxSize$ = Hex(nSize)
  Protected res$ = hxSize$ + #CRLF$ + txt$ + #CRLF$
  SendNetworkString(nClientId, res$, #PB_UTF8) 
EndProcedure

Procedure SendEOT(nClientId)
  SendNetworkString(nClientId, Hex(0) + #CRLF$ + #CRLF$, #PB_UTF8)
EndProcedure

Procedure onRequest(nClientId)
  If FindMapElement(MyMap(), Str(nClientId))
    DeleteMapElement(MyMap(), Str(nClientId))
  EndIf
  Protected sResponse.s = ""
  sResponse = RSet(sResponse, 1000, "x")
  Protected nSegmentSize = StringByteLength(sResponse, #PB_UTF8)
  Protected nLoops = SendSize / nSegmentSize
  Protected sHeader.s = "HTTP/1.1 200 OK" + #CRLF$ +
                      "Content-Type: text/plain" + #CRLF$ +
                      "Transfer-Encoding: chunked" + #CRLF$ + #CRLF$
  AddGadgetItem(#frmMain_edtNarrative, -1, "Sending " + Str(SendSize) + " bytes ...")
  SendNetworkString(nClientId, sHeader, #PB_UTF8)
  While nLoops > 0
    SendChunk(nClientId, sResponse, nSegmentSize)
    nLoops - 1
  Wend
  SendEOT(nClientId)
  AddGadgetItem(#frmMain_edtNarrative, -1, "Done" + #CRLF$)
EndProcedure

Procedure frmMain_Open()
  Protected sTitle.s = "Listening at " + 
                       GetIP() + ":" + 
                       Str(Port)
  If OpenWindow(#frmMain, 20, 20, 600, 300, sTitle)
    EditorGadget(#frmMain_edtNarrative, 10, 10, 580, 280)
  EndIf
EndProcedure

If Not CreateNetworkServer(#NetworkServer, Port)
  Debug "Failed to create network server. Is port " + Str(Port) + " in use?"
  End
EndIf

frmMain_Open()

Define.i ServerEvent, WindowEvent, ClientID
Define.s sRequest

Repeat
  WindowEvent = WaitWindowEvent(20)
  ServerEvent = NetworkServerEvent(#NetworkServer)
  If ServerEvent
    ClientID = EventClient()
    Select ServerEvent   
      Case #PB_NetworkEvent_Connect
        
      Case #PB_NetworkEvent_Disconnect
        
      Case #PB_NetworkEvent_Data
        ChunkSize = ReceiveNetworkData(ClientID, *Buffer, BufferSize)
        AddIncomingData(ClientID, PeekS(*Buffer, ChunkSize, #PB_UTF8))
        If ChunkSize < BufferSize
          onRequest(ClientID)
        EndIf
    EndSelect
  Else
    Delay(20)
  EndIf  
Until WindowEvent = #PB_Event_CloseWindow
    
CloseNetworkServer(#NetworkServer)
Client:

Code: Select all

EnableExplicit

Enumeration
  #frmMain
  #frmMain_btnHeader
  #frmMain_edtNarrative
EndEnumeration

Global IP.s = "127.0.0.1"               
Global Port = 8081

Procedure frmMain_Open()
  If OpenWindow(#frmMain, 20, 20, 600, 300, "Client")
    ButtonGadget(#frmMain_btnHeader, 10, 10, 100, 25, "HTTP")
    EditorGadget(#frmMain_edtNarrative, 10, 40, 580, 250)
  EndIf
EndProcedure

Procedure onBtn_Header()
  Protected req = HTTPRequest(#PB_HTTP_Get, "http://" + IP + ":" + Str(Port) + "/header_t")
  If req
    Protected nSize = StringByteLength(HTTPInfo(req, #PB_HTTP_Response), #PB_UTF8)
    AddGadgetItem(#frmMain_edtNarrative, -1, "SendSize was " + Str(nSize) + " bytes")
    FinishHTTP(req)
  Else  
    AddGadgetItem(#frmMain_edtNarrative, -1, "HTTP request failed")
  EndIf
EndProcedure

Procedure Events_Gadget()
  Select EventGadget()
    Case #frmMain_btnHeader
      onBtn_Header()
  EndSelect
EndProcedure

BindEvent(#PB_Event_Gadget, @Events_Gadget())

frmMain_Open()
Define WindowEvent
Repeat
  WindowEvent = WaitWindowEvent(20)
Until WindowEvent = #PB_Event_CloseWindow
User avatar
mk-soft
Always Here
Always Here
Posts: 5335
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by mk-soft »

How nice that the documentation has been adapted so that since X Über 64KB can be transferred.

Your programme does not work over the network with your evaluation in the client when the data is complete.
Received 1460 bytes
Here you have the first data from the receive buffer and break off immediately

Wireshark Faild
91 18.462977 192.168.XXX.47 192.168.XXX.22 TCP 74 43484 β†’ 8081 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=2757554519 TSecr=0 WS=128
92 18.463059 192.168.XXX.22 192.168.XXX.47 TCP 66 8081 β†’ 43484 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1460 WS=256 SACK_PERM
93 18.465385 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [ACK] Seq=1 Ack=1 Win=64256 Len=0
94 18.465385 192.168.XXX.47 192.168.XXX.22 TCP 62 43484 β†’ 8081 [PSH, ACK] Seq=1 Ack=1 Win=64256 Len=8
95 18.518061 192.168.XXX.22 192.168.XXX.47 TCP 54 8081 β†’ 43484 [ACK] Seq=1 Ack=9 Win=262656 Len=0
96 18.518071 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=1 Ack=9 Win=262656 Len=1460
97 18.518071 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=1461 Ack=9 Win=262656 Len=1460
98 18.518071 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=2921 Ack=9 Win=262656 Len=1460
99 18.518071 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=4381 Ack=9 Win=262656 Len=1460
100 18.518071 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=5841 Ack=9 Win=262656 Len=1460
101 18.518071 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=7301 Ack=9 Win=262656 Len=1460
102 18.518071 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=8761 Ack=9 Win=262656 Len=1460
103 18.518071 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=10221 Ack=9 Win=262656 Len=1460
104 18.518071 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=11681 Ack=9 Win=262656 Len=1460
105 18.518071 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=13141 Ack=9 Win=262656 Len=1460
106 18.521552 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [ACK] Seq=9 Ack=1461 Win=64128 Len=0
107 18.521552 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [ACK] Seq=9 Ack=2921 Win=63488 Len=0
108 18.521592 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=14601 Ack=9 Win=262656 Len=1460
109 18.521592 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=16061 Ack=9 Win=262656 Len=1460
110 18.521592 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=17521 Ack=9 Win=262656 Len=1460
111 18.521592 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 43484 [ACK] Seq=18981 Ack=9 Win=262656 Len=1460
112 18.521931 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [FIN, ACK] Seq=9 Ack=2921 Win=64128 Len=0
113 18.521960 192.168.XXX.22 192.168.XXX.47 TCP 54 8081 β†’ 43484 [ACK] Seq=20441 Ack=10 Win=262656 Len=0
114 18.526689 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
115 18.526689 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
116 18.526689 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
117 18.526689 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
118 18.526689 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
119 18.526689 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
120 18.526689 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
121 18.526689 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
122 18.527620 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
123 18.527620 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
124 18.527620 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
125 18.527620 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=9 Win=0 Len=0
126 18.527620 192.168.XXX.47 192.168.XXX.22 TCP 60 43484 β†’ 8081 [RST] Seq=10 Win=0 Len=0
Wireshark pass 250000 bytes
18 5.052132 192.168.XXX.47 192.168.XXX.22 TCP 74 41948 β†’ 8081 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM TSval=2757742732 TSecr=0 WS=128
19 5.052226 192.168.XXX.22 192.168.XXX.47 TCP 66 8081 β†’ 41948 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1460 WS=256 SACK_PERM
20 5.054783 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=1 Ack=1 Win=64256 Len=0
21 5.054783 192.168.XXX.47 192.168.XXX.22 TCP 62 41948 β†’ 8081 [PSH, ACK] Seq=1 Ack=1 Win=64256 Len=8
22 5.107375 192.168.XXX.22 192.168.XXX.47 TCP 54 8081 β†’ 41948 [ACK] Seq=1 Ack=9 Win=262656 Len=0
23 5.161665 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=1 Ack=9 Win=262656 Len=1460
24 5.161665 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=1461 Ack=9 Win=262656 Len=1460
25 5.161665 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=2921 Ack=9 Win=262656 Len=1460
26 5.161665 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=4381 Ack=9 Win=262656 Len=1460
27 5.161665 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=5841 Ack=9 Win=262656 Len=1460
28 5.161665 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=7301 Ack=9 Win=262656 Len=1460
29 5.161665 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=8761 Ack=9 Win=262656 Len=1460
30 5.161665 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=10221 Ack=9 Win=262656 Len=1460
31 5.161665 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=11681 Ack=9 Win=262656 Len=1460
32 5.161665 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=13141 Ack=9 Win=262656 Len=1460
33 5.165132 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=1461 Win=64128 Len=0
34 5.165176 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=14601 Ack=9 Win=262656 Len=1460
35 5.165176 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=16061 Ack=9 Win=262656 Len=1460
36 5.168050 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=5841 Win=64128 Len=0
37 5.168050 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=7301 Win=64128 Len=0
38 5.168089 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=17521 Ack=9 Win=262656 Len=1460
39 5.168089 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=18981 Ack=9 Win=262656 Len=1460
40 5.168089 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=20441 Ack=9 Win=262656 Len=1460
41 5.168089 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=21901 Ack=9 Win=262656 Len=1460
42 5.168089 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=23361 Ack=9 Win=262656 Len=1460
43 5.168089 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=24821 Ack=9 Win=262656 Len=1460
44 5.168089 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=26281 Ack=9 Win=262656 Len=1460
45 5.168089 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=27741 Ack=9 Win=262656 Len=1460
46 5.168742 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=11681 Win=64128 Len=0
47 5.168742 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=14601 Win=64128 Len=0
48 5.168783 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=29201 Ack=9 Win=262656 Len=1460
49 5.168783 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=30661 Ack=9 Win=262656 Len=1460
50 5.168783 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=32121 Ack=9 Win=262656 Len=1460
51 5.168783 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=33581 Ack=9 Win=262656 Len=1460
52 5.168783 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=35041 Ack=9 Win=262656 Len=1460
53 5.168783 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=36501 Ack=9 Win=262656 Len=1460
54 5.168783 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=37961 Ack=9 Win=262656 Len=1460
55 5.168783 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=39421 Ack=9 Win=262656 Len=1460
56 5.168783 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=40881 Ack=9 Win=262656 Len=1460
57 5.168783 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=42341 Ack=9 Win=262656 Len=1460
58 5.174043 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=16061 Win=64128 Len=0
59 5.174043 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=17521 Win=64128 Len=0
60 5.174043 192.168.XXX.47 192.168.XXX.22 TCP 62 41948 β†’ 8081 [ACK] Seq=9 Ack=18981 Win=64128 Len=0
61 5.174043 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=21901 Win=63360 Len=0
62 5.174043 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=29201 Win=63232 Len=0
63 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=43801 Ack=9 Win=262656 Len=1460
64 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=45261 Ack=9 Win=262656 Len=1460
65 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=46721 Ack=9 Win=262656 Len=1460
66 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=48181 Ack=9 Win=262656 Len=1460
67 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=49641 Ack=9 Win=262656 Len=1460
68 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=51101 Ack=9 Win=262656 Len=1460
69 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=52561 Ack=9 Win=262656 Len=1460
70 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=54021 Ack=9 Win=262656 Len=1460
71 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=55481 Ack=9 Win=262656 Len=1460
72 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=56941 Ack=9 Win=262656 Len=1460
73 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=58401 Ack=9 Win=262656 Len=1460
74 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=59861 Ack=9 Win=262656 Len=1460
75 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=61321 Ack=9 Win=262656 Len=1460
76 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=62781 Ack=9 Win=262656 Len=1460
77 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=64241 Ack=9 Win=262656 Len=1460
78 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=65701 Ack=9 Win=262656 Len=1460
79 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=67161 Ack=9 Win=262656 Len=1460
80 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=68621 Ack=9 Win=262656 Len=1460
81 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=70081 Ack=9 Win=262656 Len=1460
82 5.174181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=71541 Ack=9 Win=262656 Len=1460
83 5.176569 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=40881 Win=57344 Len=0
84 5.176569 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=43801 Win=56320 Len=0
85 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=73001 Ack=9 Win=262656 Len=1460
86 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=74461 Ack=9 Win=262656 Len=1460
87 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=75921 Ack=9 Win=262656 Len=1460
88 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=77381 Ack=9 Win=262656 Len=1460
89 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=78841 Ack=9 Win=262656 Len=1460
90 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=80301 Ack=9 Win=262656 Len=1460
91 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=81761 Ack=9 Win=262656 Len=1460
92 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=83221 Ack=9 Win=262656 Len=1460
93 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=84681 Ack=9 Win=262656 Len=1460
94 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=86141 Ack=9 Win=262656 Len=1460
95 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=87601 Ack=9 Win=262656 Len=1460
96 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=89061 Ack=9 Win=262656 Len=1460
97 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=90521 Ack=9 Win=262656 Len=1460
98 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=91981 Ack=9 Win=262656 Len=1460
99 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=93441 Ack=9 Win=262656 Len=1460
100 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=94901 Ack=9 Win=262656 Len=1460
101 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=96361 Ack=9 Win=262656 Len=1460
102 5.176613 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=97821 Ack=9 Win=262656 Len=1460
103 5.185388 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=54021 Win=59264 Len=0
104 5.185388 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=56941 Win=63360 Len=0
105 5.185388 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=68621 Win=64128 Len=0
106 5.185388 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=74461 Win=75776 Len=0
107 5.185388 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=78841 Win=84608 Len=0
108 5.185388 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=83221 Win=93312 Len=0
109 5.185388 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=87601 Win=102144 Len=0
110 5.185388 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=91981 Win=110848 Len=0
111 5.185388 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=96361 Win=119680 Len=0
112 5.185388 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=99281 Win=125440 Len=0
113 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=99281 Ack=9 Win=262656 Len=1460
114 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=100741 Ack=9 Win=262656 Len=1460
115 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=102201 Ack=9 Win=262656 Len=1460
116 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=103661 Ack=9 Win=262656 Len=1460
117 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=105121 Ack=9 Win=262656 Len=1460
118 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=106581 Ack=9 Win=262656 Len=1460
119 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=108041 Ack=9 Win=262656 Len=1460
120 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=109501 Ack=9 Win=262656 Len=1460
121 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=110961 Ack=9 Win=262656 Len=1460
122 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=112421 Ack=9 Win=262656 Len=1460
123 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=113881 Ack=9 Win=262656 Len=1460
124 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=115341 Ack=9 Win=262656 Len=1460
125 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=116801 Ack=9 Win=262656 Len=1460
126 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=118261 Ack=9 Win=262656 Len=1460
127 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=119721 Ack=9 Win=262656 Len=1460
128 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=121181 Ack=9 Win=262656 Len=1460
129 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=122641 Ack=9 Win=262656 Len=1460
130 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=124101 Ack=9 Win=262656 Len=1460
131 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=125561 Ack=9 Win=262656 Len=1460
132 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=127021 Ack=9 Win=262656 Len=1460
133 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=128481 Ack=9 Win=262656 Len=1460
134 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=129941 Ack=9 Win=262656 Len=1460
135 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=131401 Ack=9 Win=262656 Len=1460
136 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=132861 Ack=9 Win=262656 Len=1460
137 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=134321 Ack=9 Win=262656 Len=1460
138 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=135781 Ack=9 Win=262656 Len=1460
139 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=137241 Ack=9 Win=262656 Len=1460
140 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=138701 Ack=9 Win=262656 Len=1460
141 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=140161 Ack=9 Win=262656 Len=1460
142 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=141621 Ack=9 Win=262656 Len=1460
143 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=143081 Ack=9 Win=262656 Len=1460
144 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=144541 Ack=9 Win=262656 Len=1460
145 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=146001 Ack=9 Win=262656 Len=1460
146 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=147461 Ack=9 Win=262656 Len=1460
147 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=148921 Ack=9 Win=262656 Len=1460
148 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=150381 Ack=9 Win=262656 Len=1460
149 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=151841 Ack=9 Win=262656 Len=1460
150 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=153301 Ack=9 Win=262656 Len=1460
151 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=154761 Ack=9 Win=262656 Len=1460
152 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=156221 Ack=9 Win=262656 Len=1460
153 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=157681 Ack=9 Win=262656 Len=1460
154 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=159141 Ack=9 Win=262656 Len=1460
155 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=160601 Ack=9 Win=262656 Len=1460
156 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=162061 Ack=9 Win=262656 Len=1460
157 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=163521 Ack=9 Win=262656 Len=1460
158 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=164981 Ack=9 Win=262656 Len=1460
159 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=166441 Ack=9 Win=262656 Len=1460
160 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=167901 Ack=9 Win=262656 Len=1460
161 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=169361 Ack=9 Win=262656 Len=1460
162 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=170821 Ack=9 Win=262656 Len=1460
163 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=172281 Ack=9 Win=262656 Len=1460
164 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=173741 Ack=9 Win=262656 Len=1460
165 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=175201 Ack=9 Win=262656 Len=1460
166 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=176661 Ack=9 Win=262656 Len=1460
167 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=178121 Ack=9 Win=262656 Len=1460
168 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=179581 Ack=9 Win=262656 Len=1460
169 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=181041 Ack=9 Win=262656 Len=1460
170 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=182501 Ack=9 Win=262656 Len=1460
171 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=183961 Ack=9 Win=262656 Len=1460
172 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=185421 Ack=9 Win=262656 Len=1460
173 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=186881 Ack=9 Win=262656 Len=1460
174 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=188341 Ack=9 Win=262656 Len=1460
175 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=189801 Ack=9 Win=262656 Len=1460
176 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=191261 Ack=9 Win=262656 Len=1460
177 5.185552 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=192721 Ack=9 Win=262656 Len=1460
178 5.189334 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=100741 Win=128384 Len=0
179 5.189378 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=194181 Ack=9 Win=262656 Len=1460
180 5.189378 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=195641 Ack=9 Win=262656 Len=1460
181 5.194112 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=105121 Win=137088 Len=0
182 5.194112 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=109501 Win=145920 Len=0
183 5.194112 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=113881 Win=154624 Len=0
184 5.194112 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=118261 Win=163456 Len=0
185 5.194112 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=122641 Win=172160 Len=0
186 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=197101 Ack=9 Win=262656 Len=1460
187 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=198561 Ack=9 Win=262656 Len=1460
188 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=200021 Ack=9 Win=262656 Len=1460
189 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=201481 Ack=9 Win=262656 Len=1460
190 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=202941 Ack=9 Win=262656 Len=1460
191 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=204401 Ack=9 Win=262656 Len=1460
192 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=205861 Ack=9 Win=262656 Len=1460
193 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=207321 Ack=9 Win=262656 Len=1460
194 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=208781 Ack=9 Win=262656 Len=1460
195 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=210241 Ack=9 Win=262656 Len=1460
196 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=211701 Ack=9 Win=262656 Len=1460
197 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=213161 Ack=9 Win=262656 Len=1460
198 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=214621 Ack=9 Win=262656 Len=1460
199 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=216081 Ack=9 Win=262656 Len=1460
200 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=217541 Ack=9 Win=262656 Len=1460
201 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=219001 Ack=9 Win=262656 Len=1460
202 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=220461 Ack=9 Win=262656 Len=1460
203 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=221921 Ack=9 Win=262656 Len=1460
204 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=223381 Ack=9 Win=262656 Len=1460
205 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=224841 Ack=9 Win=262656 Len=1460
206 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=226301 Ack=9 Win=262656 Len=1460
207 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=227761 Ack=9 Win=262656 Len=1460
208 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=229221 Ack=9 Win=262656 Len=1460
209 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=230681 Ack=9 Win=262656 Len=1460
210 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=232141 Ack=9 Win=262656 Len=1460
211 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=233601 Ack=9 Win=262656 Len=1460
212 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=235061 Ack=9 Win=262656 Len=1460
213 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=236521 Ack=9 Win=262656 Len=1460
214 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=237981 Ack=9 Win=262656 Len=1460
215 5.194181 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=239441 Ack=9 Win=262656 Len=1460
216 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=127021 Win=180992 Len=0
217 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=128481 Win=183808 Len=0
218 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=132861 Win=192640 Len=0
219 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=137241 Win=201344 Len=0
220 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=141621 Win=210176 Len=0
221 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=146001 Win=218880 Len=0
222 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=151841 Win=230528 Len=0
223 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=157681 Win=242304 Len=0
224 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=162061 Win=251008 Len=0
225 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=166441 Win=259840 Len=0
226 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=170821 Win=268544 Len=0
227 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=175201 Win=277248 Len=0
228 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=179581 Win=286080 Len=0
229 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=183961 Win=294784 Len=0
230 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=188341 Win=303616 Len=0
231 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=189801 Win=306560 Len=0
232 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 62 41948 β†’ 8081 [ACK] Seq=9 Ack=194181 Win=315264 Len=0
233 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=198561 Win=323968 Len=0
234 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=202941 Win=332800 Len=0
235 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=207321 Win=341504 Len=0
236 5.201828 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=208781 Win=344448 Len=0
237 5.201956 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=240901 Ack=9 Win=262656 Len=1460
238 5.201956 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=242361 Ack=9 Win=262656 Len=1460
239 5.201956 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=243821 Ack=9 Win=262656 Len=1460
240 5.201956 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=245281 Ack=9 Win=262656 Len=1460
241 5.201956 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=246741 Ack=9 Win=262656 Len=1460
242 5.201956 192.168.XXX.22 192.168.XXX.47 TCP 1514 8081 β†’ 41948 [ACK] Seq=248201 Ack=9 Win=262656 Len=1460
243 5.201956 192.168.XXX.22 192.168.XXX.47 TCP 394 8081 β†’ 41948 [PSH, ACK] Seq=249661 Ack=9 Win=262656 Len=340
244 5.202593 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=213161 Win=353280 Len=0
245 5.202593 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=216081 Win=359040 Len=0
246 5.203316 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=220461 Win=367872 Len=0
247 5.203316 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=224841 Win=376576 Len=0
248 5.203316 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=229221 Win=385280 Len=0
249 5.203316 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=230681 Win=388224 Len=0
250 5.205754 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=235061 Win=397056 Len=0
251 5.205754 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=236521 Win=400000 Len=0
252 5.205754 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=240901 Win=408704 Len=0
253 5.205754 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=242361 Win=411648 Len=0
254 5.210241 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=246741 Win=420352 Len=0
255 5.210241 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=248201 Win=423296 Len=0
256 5.210241 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=9 Ack=250001 Win=429184 Len=0
257 5.210241 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [FIN, ACK] Seq=9 Ack=250001 Win=429184 Len=0
258 5.210304 192.168.XXX.22 192.168.XXX.47 TCP 54 8081 β†’ 41948 [ACK] Seq=250001 Ack=10 Win=262656 Len=0
259 5.235357 192.168.XXX.22 192.168.XXX.47 TCP 54 8081 β†’ 41948 [FIN, ACK] Seq=250001 Ack=10 Win=262656 Len=0
260 5.238332 192.168.XXX.47 192.168.XXX.22 TCP 60 41948 β†’ 8081 [ACK] Seq=10 Ack=250002 Win=429184 Len=0
Wireshark Localhost
1 0.000000 127.0.0.1 127.0.0.1 TCP 56 51279 β†’ 8081 [SYN] Seq=0 Win=65535 Len=0 MSS=65495 WS=256 SACK_PERM
2 0.000055 127.0.0.1 127.0.0.1 TCP 56 8081 β†’ 51279 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=65495 WS=256 SACK_PERM
3 0.000143 127.0.0.1 127.0.0.1 TCP 44 51279 β†’ 8081 [ACK] Seq=1 Ack=1 Win=2619648 Len=0
4 0.000146 127.0.0.1 127.0.0.1 TCP 52 51279 β†’ 8081 [PSH, ACK] Seq=1 Ack=1 Win=2619648 Len=8
5 0.000174 127.0.0.1 127.0.0.1 TCP 44 8081 β†’ 51279 [ACK] Seq=1 Ack=9 Win=2619648 Len=0
6 0.053721 127.0.0.1 127.0.0.1 TCP 65539 8081 β†’ 51279 [ACK] Seq=1 Ack=9 Win=2619648 Len=65495
7 0.053765 127.0.0.1 127.0.0.1 TCP 65539 8081 β†’ 51279 [ACK] Seq=65496 Ack=9 Win=2619648 Len=65495
8 0.053790 127.0.0.1 127.0.0.1 TCP 65539 8081 β†’ 51279 [ACK] Seq=130991 Ack=9 Win=2619648 Len=65495
9 0.053828 127.0.0.1 127.0.0.1 TCP 53559 8081 β†’ 51279 [PSH, ACK] Seq=196486 Ack=9 Win=2619648 Len=53515
10 0.053939 127.0.0.1 127.0.0.1 TCP 44 51279 β†’ 8081 [ACK] Seq=9 Ack=250001 Win=2500608 Len=0
11 0.054044 127.0.0.1 127.0.0.1 TCP 44 [TCP Window Update] 51279 β†’ 8081 [ACK] Seq=9 Ack=250001 Win=2566144 Len=0
12 0.056501 127.0.0.1 127.0.0.1 TCP 44 51279 β†’ 8081 [FIN, ACK] Seq=9 Ack=250001 Win=2566144 Len=0
13 0.056519 127.0.0.1 127.0.0.1 TCP 44 8081 β†’ 51279 [ACK] Seq=250001 Ack=10 Win=2619648 Len=0
14 0.057411 127.0.0.1 127.0.0.1 TCP 44 8081 β†’ 51279 [FIN, ACK] Seq=250001 Ack=10 Win=2619648 Len=0
15 0.057447 127.0.0.1 127.0.0.1 TCP 44 51279 β†’ 8081 [ACK] Seq=10 Ack=250002 Win=2566144 Len=0
21 9.396313 127.0.0.1 127.0.0.1 TCP 56 51282 β†’ 8081 [SYN] Seq=0 Win=65535 Len=0 MSS=65495 WS=256 SACK_PERM
22 9.396349 127.0.0.1 127.0.0.1 TCP 56 8081 β†’ 51282 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=65495 WS=256 SACK_PERM
23 9.396425 127.0.0.1 127.0.0.1 TCP 44 51282 β†’ 8081 [ACK] Seq=1 Ack=1 Win=2619648 Len=0
24 9.396589 127.0.0.1 127.0.0.1 HTTP 154 GET /header_t HTTP/1.1
25 9.396613 127.0.0.1 127.0.0.1 TCP 44 8081 β†’ 51282 [ACK] Seq=1 Ack=111 Win=2619648 Len=0
26 9.435082 127.0.0.1 127.0.0.1 TCP 65539 8081 β†’ 51282 [ACK] Seq=1 Ack=111 Win=2619648 Len=65495 [TCP segment of a reassembled PDU]
27 9.435145 127.0.0.1 127.0.0.1 TCP 65539 8081 β†’ 51282 [ACK] Seq=65496 Ack=111 Win=2619648 Len=65495 [TCP segment of a reassembled PDU]
28 9.435183 127.0.0.1 127.0.0.1 TCP 65539 8081 β†’ 51282 [ACK] Seq=130991 Ack=111 Win=2619648 Len=65495 [TCP segment of a reassembled PDU]
29 9.435234 127.0.0.1 127.0.0.1 HTTP 53628 HTTP/1.1 200 OK (text/plain)
30 9.435419 127.0.0.1 127.0.0.1 TCP 44 51282 β†’ 8081 [ACK] Seq=111 Ack=250070 Win=2500608 Len=0
31 9.435528 127.0.0.1 127.0.0.1 TCP 44 [TCP Window Update] 51282 β†’ 8081 [ACK] Seq=111 Ack=250070 Win=2566144 Len=0
32 9.435794 127.0.0.1 127.0.0.1 TCP 44 51282 β†’ 8081 [FIN, ACK] Seq=111 Ack=250070 Win=2566144 Len=0
33 9.435804 127.0.0.1 127.0.0.1 TCP 44 8081 β†’ 51282 [ACK] Seq=250070 Ack=112 Win=2619648 Len=0
38 9.437586 127.0.0.1 127.0.0.1 TCP 44 8081 β†’ 51282 [FIN, ACK] Seq=250070 Ack=112 Win=2619648 Len=0
39 9.437616 127.0.0.1 127.0.0.1 TCP 44 51282 β†’ 8081 [ACK] Seq=112 Ack=250071 Win=2566144 Len=0
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
User avatar
the.weavster
Addict
Addict
Posts: 1537
Joined: Thu Jul 03, 2003 6:53 pm
Location: England

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by the.weavster »

mk-soft wrote: ↑Mon Jan 09, 2023 7:38 pm How nice that the documentation has been adapted so that since X Über 64KB can be transferred.

Your programme does not work over the network with your evaluation in the client when the data is complete.
Received 1460 bytes
Here you have the first data from the receive buffer and break off immediately
Interesting... πŸ€”οΈ
So it does seem at very least you need some kind of end-of-transmission terminator.
Oso
Enthusiast
Enthusiast
Posts: 595
Joined: Wed Jul 20, 2022 10:09 am

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by Oso »

the.weavster wrote: ↑Mon Jan 09, 2023 4:02 pm Using "Transfer-Encoding: chunked" and HTTPRequest() we can handle properly big stuff 8)
Just to throw in some comments on my own findings which may be relevant here, especially in light of the Wireshark result from mk-soft. I'm getting very good results in testing 30 MB data transfers, but this is not without a weakness :

1. My server is sending short lines of data using SendNetworkString(). The client is picking this up with ReceiveNetworkData() and the number of bytes matches exactly. The code is your snippet from Saturday, @the.weavster.

2. Since my test data is presented visually in the console as repeated 'dir' listings, each in alphabetical sequence, I would be able to see myself if the order of the 64 KByte segments was mixed up, which I think is broadly the question being discussed in this thread. So far it is fine.

3. However, a strange anomaly is that it is necessary to place a 1 ms delay between the short (~100 Byte) SendNetworkString() lines, otherwise there is data loss at the final part of the transfer, even across localhost. It does not appear to lose data within the transmission β€” only at the end. Adding the 1ms loop delay resolves it entirely and 100% reliably, as far as I can establish (I've carried out two days of testing).

Code: Select all

  directory.l = ExamineDirectory(#PB_Any, dirpath.s, "*.*")
  If directory.l
    While NextDirectoryEntry(directory.l)
      type.s = "     "
      If DirectoryEntryType(directory.l) = #PB_DirectoryEntry_Directory
        type.s = "<DIR>"
      EndIf
      text.s = LSet(DirectoryEntryName(directory.l),40) + " " + type.s + "  " + FormatDate("%dd/%mm/%yyyy", DirectoryEntryDate(directory.l, #PB_Date_Modified)) + "  " + FormatDate("%hh:%ii:%ss", DirectoryEntryDate(directory.l, #PB_Date_Modified)) + "  " + FormatNumber(DirectoryEntrySize(directory.l),0) + " bytes" + #CRLF$
      SendNetworkString(ClientID, text.s, #PB_Ascii)
      Delay(1)
    Wend
    FinishDirectory(directory.l)
  Else
User avatar
HeX0R
Addict
Addict
Posts: 979
Joined: Mon Sep 20, 2004 7:12 am
Location: Hell

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by HeX0R »

You are ignoring the result of SendNetworkString(), you can never know, if the whole string had been sent or not.
If you left-out the delay, all strings might be send more or less instantly, which might lead to a WSAEWOULDBLOCK

The result of ExamineDirectory(#PB_Any, is a pointer, btw.
A long will only work (reliable) for 32bit binaries
Oso
Enthusiast
Enthusiast
Posts: 595
Joined: Wed Jul 20, 2022 10:09 am

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by Oso »

HeX0R wrote: ↑Tue Jan 10, 2023 12:06 pm You are ignoring the result of SendNetworkString(), you can never know, if the whole string had been sent or not.
If you left-out the delay, all strings might be send more or less instantly, which might lead to a WSAEWOULDBLOCK
Thank you, you're absolutely right, that's the reason β€” see last line below :)

Code: Select all

PureBasic - Server - Server created
PureBasic - Server - A new client has connected !
PureBasic - Server - Client 7801216 has send a packet !
Recevied data from client - string : Hello from the client
PureBasic - Server - Sending a long directory listing to the client...
bytes sent : -1
I removed Delay(1) and added the test for the result of SendNetworkString() being less than 1.

In that case, when SendNetworkString() is called, it might not send anything, as is happening here. I assume this means that correct usage is to put it in a loop every time until all bytes are sent. Is that the proper way?
HeX0R wrote: The result of ExamineDirectory(#PB_Any, is a pointer, btw.
A long will only work (reliable) for 32bit binaries
Thanks, I hadn't realised the result was a pointer. I see that in the documentation page for ExamineDirectory() it refers to it only as a 'number'. Is this the case with all use of #PB_Any? If so I'm going to need to remove quite a lot of longs.
User avatar
NicTheQuick
Addict
Addict
Posts: 1224
Joined: Sun Jun 22, 2003 7:43 pm
Location: Germany, SaarbrΓΌcken
Contact:

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by NicTheQuick »

the.weavster wrote: ↑Sun Jan 08, 2023 1:44 pm
STARGΓ…TE wrote: ↑Sat Jan 07, 2023 9:50 am
  • If you sent data with multiple calls of SendNetworkString or SendNetworkData, there is no guarantee that the data is received in multiple calls of ReceiveNetworkData too. It is also possible that two or more sent data are received within one
    ReceiveNetworkData call concatenated.
@NickTheQuick
Do you know what happens with TCP in this scenario described by STARGΓ…TE where instead of a message being sent with one call to SendNetworkData() it is sent in multiple snippets by repeated calls to that command?
It makes no difference if you send 100 times 1 byte or 100 bytes in just one call. You are just putting data into to the transmit buffer of the kernels network stack. It may or may not reassemble the data into one or more packets before sending them to the physical network layer. Also keep in mind that just testing on localhost is not enough. If there are routers and switches involved packets can be arbitrarily reassembled until they reach their destination.

(btw there is no k after Nic in my name :wink: )

@Oso:
You mentioned HTTP and chunked encoding. This is just a whole new protocol on top of TCP/IP and a whole other topic in my opinion.
The english grammar is freeware, you can use it freely - But it's not Open Source, i.e. you can not change it or publish it in altered way.
User avatar
HeX0R
Addict
Addict
Posts: 979
Joined: Mon Sep 20, 2004 7:12 am
Location: Hell

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by HeX0R »

Oso wrote: ↑Tue Jan 10, 2023 1:20 pm In that case, when SendNetworkString() is called, it might not send anything, as is happening here. I assume this means that correct usage is to put it in a loop every time until all bytes are sent. Is that the proper way?
Well... yes and no ;)
Sending data via network needs a little more things to consider, that's why I said above:
Most people are handling SendNetworkData/String wrong.
For a result of -1 you need to know, what the reason is, the answer here from idle might be a good start:
viewtopic.php?t=42843
That could be WSAEWOULDBLOCK... then simply wait and send it again, but it might be also a connection loss then it wouldn't help to resend it.
Therefore, unfortunately, for a robust application you need the help of the API to find out.
Or simply send slower and ignore all possible errors.
It can be tricky to use the send commands correctly

Oso wrote: ↑Tue Jan 10, 2023 1:20 pm Thanks, I hadn't realised the result was a pointer. I see that in the documentation page for ExamineDirectory() it refers to it only as a 'number'. Is this the case with all use of #PB_Any? If so I'm going to need to remove quite a lot of longs.
In general you should use integers for objects created with #PB_Any, yes.
But besides that, longs (or word or bytes) should be only used, where you are forced to.
E.g. for API calls, or inside structures.
For anything else, no matter how big the content will be:
Use integers!
Oso
Enthusiast
Enthusiast
Posts: 595
Joined: Wed Jul 20, 2022 10:09 am

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by Oso »

NicTheQuick wrote: ↑Tue Jan 10, 2023 1:47 pm @Oso: You mentioned HTTP and chunked encoding. This is just a whole new protocol on top of TCP/IP and a whole other topic in my opinion.
Not exactly, I only included your comment about HTTP in my post, to the extent that you made the point about it handling big stuff. I'm wondering if its the case that SendNetworkString() and the other closely related functions have their limitations and perhaps large amounts of data illustrate that.

I've just been looking at HeX0R's suggestion about the returned 'result' of SendNetworkString() which I hadn't realised existed (it wasn't included in the documentation example that I worked from). On trying it, I'm finding that sometimes it repeatedly returns -1 and no further transmission takes place thereafter. But as long as I keep that Delay(1) in the loop, all is fine :?
User avatar
the.weavster
Addict
Addict
Posts: 1537
Joined: Thu Jul 03, 2003 6:53 pm
Location: England

Re: Network data server/client SendNetworkString/ReceiveNetworkData

Post by the.weavster »

NicTheQuick wrote: ↑Tue Jan 10, 2023 1:47 pm You mentioned HTTP and chunked encoding. This is just a whole new protocol on top of TCP/IP and a whole other topic in my opinion.
Oso wrote: ↑Tue Jan 10, 2023 2:18 pm Not exactly, I only included your comment about HTTP in my post, to the extent that you made the point about it handling big stuff.
It was me that mentioned chunked encoding and using HTTPRequest() on the client side :wink:
It certainly seems a lot easier 8)
Post Reply