That's how Winsock works. You can't receive large amounts of data at once. The DataArrival event fires multiple times with small chunks of data of a few kilobytes in size. You will have to buffer the incoming data and check if everything has been received.
This is a very basic example.
vb Code:
Private sBuffer As String
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim sData As String
Winsock.GetData sData, vbString 'get data
sBuffer = sBuffer & sData 'buffer data
If InStr(1, sBuffer, "<end of data>") Then 'look for the end of the data
'all data has been received
End If
End Sub