0 Replies - 2211 Views - Last Post: 30 November 2009 - 12:01 PM Rate Topic: -----

#1 yuvagem   User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 5
  • Joined: 23-November 09

Streaming Video from server

Posted 30 November 2009 - 12:01 PM

I have a program for file transfer from remote server to client and it works perfect, but i want to modify the code so that client can stream multiple videos from remote server instead of downloading it first, can any one help me with this modification, very urgent pls help me, i willpost the client and server program here

Client :
Option Explicit
'
' ---------------------------------------------------------------------------------
' File...........: fClient.frm
' Author.........: Will Barden
' Created........: 09/06/03
' Modified.......: 11/06/03
' Version........: 1.1
' Website........: [url=http://www.WinsockVB.com]http://www.WinsockVB.com[/url]
' Contact........: [email protected]
'
' Sample client to the file transfer server (fServer.frm). This shows how to
' handle the very simple protocol between the client/server, and how to save
' the pieces of data as one consecutive file, in binary mode.
' ---------------------------------------------------------------------------------
'
' ---------------------------------------------------------------------------------
' Private variables.
' ---------------------------------------------------------------------------------
'
Private m_blnTransferring  As Boolean
Private m_strFilename	  As String
'
' ---------------------------------------------------------------------------------
' Control events.
' ---------------------------------------------------------------------------------
'
Private Sub cmdConnect_Click()
   '
   ' Connect to the localhost on port 10101.
   Call lstEvents.AddItem("Connecting to 127.0.0.1")
   With Winsock
	  Call .Close
	  .RemoteHost = "127.0.0.1"
	  .RemotePort = 10101
	  Call .Connect
   End With
   '
End Sub
'
Private Sub cmdClose_Click()
   '
   Call Unload(Me)
   '
End Sub
'
' ---------------------------------------------------------------------------------
' Winsock events.
' ---------------------------------------------------------------------------------
'
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
   '
Dim strData	As String
Dim hFile	  As Long
   '
   ' Grab the incoming data.
   Call Winsock.GetData(strData)
   '
   ' If we're not in a file transfer operation, this could well be a "BOF".
   If (Not m_blnTransferring) Then
	  '
	  If (Mid$(strData, 1, 3) = "BOF") Then
		 '
		 ' We have an incoming file - save the filename, and set the operation
		 ' flag so that next time data arrives (file data) it will be saved.
		 Call lstEvents.AddItem("Received BOF - incoming file:" & Mid$(strData, 4))
		 m_blnTransferring = True
		 m_strFilename = Mid$(strData, 4)
		 '
		 ' Send back a "NEXT" to get some of the file data.
		 Call lstEvents.AddItem("Requesting first piece")
		 Call Winsock.SendData("NEXT")
		 DoEvents
		 '
	  End If
	  '
   Else
	  '
	  ' If we're already in a transfer, this data could either be file data, or
	  ' an EOF marker.
	  If (Mid$(strData, 1, 3) = "EOF") Then
		 '
		 ' The transfer is complete.
		 m_blnTransferring = False
		 Call lstEvents.AddItem("Received EOF, transfer complete")
		 DoEvents
		 '
	  Else
		 '
		 ' Open a temporary file in the current directory - this is where all the
		 ' file data is saved.
		 hFile = FreeFile
		 Open App.Path & "\temp.bmp" For Binary As #hFile
		 '
		 ' Move to the end of the file, and write the data.
		 Seek #hFile, LOF(hFile) + 1
		 Put #hFile, , strData
		 '
		 Close #hFile
		 '
		 ' Send the server another "NEXT" command to get the next piece of data.
		 Call lstEvents.AddItem("Data arrived, requesting next piece")
		 Call Winsock.SendData("NEXT")
		 DoEvents
		 '
	  End If
	  '
   End If
   '
End Sub
'
Private Sub Winsock_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
   '
   ' An error has occurred. Log the event and shutdown the connection.
   Call lstEvents.AddItem(Description)
   Call lstEvents.AddItem("Shutting down")
   '
   Call Winsock.Close
   m_blnTransferring = False
   '
End Sub
'
' ---------------------------------------------------------------------------------
' EOF.
' ---------------------------------------------------------------------------------
'



Server:
Option Explicit
'
' ---------------------------------------------------------------------------------
' File...........: fServer.frm
' Author.........: Will Barden
' Created........: 09/06/03
' Modified.......: 11/06/03
' Version........: 1.1
' Website........: [url=http://www.WinsockVB.com]http://www.WinsockVB.com[/url]
' Contact........: [email protected]
'
' A very simple and primitive file sender, this project will demonstrate
' binary file techniques, handling the binary data, and sending a file in
' chunks of xKB at a time.
'
' Three commands are used during the transfer process:
'
'   BOF (Beginning Of File) - This is used to indicate to the remote host that a
' file is on it's way.
'
'   NEXT (Next chunk please) - A host receiving a file will send this each time
' it wants the next piece of the file.
'
'   EOF (End Of File) - This is send to the remote host once all the file data
' has been transmitted. The remote host can then let the user know the transfer
' is complete.
'
' The general sequence is this:
'   1. Both hosts connect. The server is going to send the client a file.
'   2. Server: Send "BOF[filename]"
'   3. Client: Send "NEXT"
'   4. Server: If there's more data, send it.
'			  If there's no more data, send "EOF".
'   5. Client: If data has arrived, send "NEXT".
'			  If "EOF" has arrived, transfer is complete.
'
' ------------------------------------------------------------------------------
'
' ------------------------------------------------------------------------------
' Constants.
' ------------------------------------------------------------------------------
'
Private Const CHUNK_SIZE As Long = 3072 ' 3KB.
'
' ------------------------------------------------------------------------------
' Private variables.
' ------------------------------------------------------------------------------
'
Private blnTransferring  As Boolean
Private lngFilePos	   As Long
Private strFilename	  As String
'
' ------------------------------------------------------------------------------
' Form events.
' ------------------------------------------------------------------------------
'
Private Sub Form_Load()
   '
   ' Show the client form, and start listening.
   Call StartServer
   '
End Sub
'
' ------------------------------------------------------------------------------
' Control events.
' ------------------------------------------------------------------------------
'
Private Sub cmdClose_Click()
   '
   Call Unload(Me)
   '
End Sub
'
Private Sub cmdSendFile_Click()
   '
   ' Start the file sending procedure.
   Call lstEvents.AddItem("Initializing transfer")
   Call SendFile(App.Path & "\..\logo.bmp")
   '
End Sub
'
' ------------------------------------------------------------------------------
' Private helpers.
' ------------------------------------------------------------------------------
'
Private Sub StartServer()
   '
   ' Set the Winsock up to listen on port 10101.
   Call lstEvents.AddItem("Server started, listening on 10101")
   With Winsock
	  Call .Close
	  .LocalPort = 10101
	  Call .Listen
   End With
   '
End Sub
'
Private Sub SendFile(ByVal strFile As String)
   '
   ' Store the filename for later.
   strFilename = strFile
   '
   Call lstEvents.AddItem("Sending BOF: " & strFilename)
   '
   ' Set the transferring flag (since we're now connected), and send the BOF
   ' marker - this instructs the remote host that a file is on it's way.
   blnTransferring = True
   Call Winsock.SendData("BOF" & strFilename)
   DoEvents
   '
End Sub
'
Private Sub SendNextChunk()
   '
Dim hFile		 As Long
Dim lngChunkSize  As Long
Dim strData	   As String
   '
   ' If we're not currently connected and transferring, exit. This shouldn't
   ' happen, but just in case...
   If (Not blnTransferring) Then Exit Sub
   '
   ' Open the file that we're sending, for BINARY mode. This means that we can
   ' read out bits regardless of what's in the file (text, image, music etc..).
   hFile = FreeFile
   Open strFilename For Binary As #hFile
   '
   ' We need to read the next unsent piece of the file, so move through the
   ' file past all the bits we've already sent. Then, when we read into
   ' strData, the data will be the next consecutive bytes.
   If (lngFilePos = 0) Then lngFilePos = 1
   Seek hFile, lngFilePos
   '
   ' Work out how large this chunk is going to be. Normally, it will be the
   ' standard CHUNK_SIZE, but if the last piece is less than that, decrease it.
   lngChunkSize = LOF(hFile) + 1 - lngFilePos
   If (lngChunkSize > CHUNK_SIZE) Then lngChunkSize = CHUNK_SIZE
   '
   ' If the chunksize was 0, it means there's no data left to send, so our
   ' transfer is complete.
   If (lngChunkSize = 0) Then
	  '
	  ' Send the EOF marker so the remote host knows that's all the data.
	  strData = "EOF"
	  blnTransferring = False
	  Call lstEvents.AddItem("0 bytes, transfer completed. Sending EOF.")
	  '
	  ' Send the data to the remote host.
	  Call Winsock.SendData(strData)
	  DoEvents
	  '
   Else
	  '
	  ' Grab the data from the file, and increment our file pointer so that next
	  ' time we read, we are reading the next piece of the file.
	  strData = String$(lngChunkSize, 0)
	  Get #hFile, , strData
	  lngFilePos = lngFilePos + lngChunkSize
	  '
	  ' Send the data to the remote host.
	  Call Winsock.SendData(strData)
	  Call lstEvents.AddItem("Sent " & lngChunkSize & " bytes")
	  DoEvents
	  '
   End If
   '
   Close #hFile
   '
End Sub
'
' ------------------------------------------------------------------------------
' Winsock events.
' ------------------------------------------------------------------------------
'
Private Sub Winsock_ConnectionRequest(ByVal requestID As Long)
   '
   ' Accept the incoming connection from the client.
   With Winsock
	  Call .Close
	  Call .Accept(requestID)
   End With
   Call lstEvents.AddItem("Incoming connection request, accepted")
   '
   cmdSendFile.Enabled = True
   '
End Sub
'
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
   '
Dim strData As String
   '
   ' Grab the incoming data and check it.
   Call Winsock.GetData(strData)
   If (strData = "NEXT") Then
	  '
	  ' The remote host has asked for the NEXT chunk.. so send it to them!
	  Call lstEvents.AddItem("Sending next chunk.")
	  Call SendNextChunk
	  '
   Else
	  '
	  ' Data has arrived and we're not sure what it is. This shouldn't happen,
	  ' but for debugging purposes, display it.
	  Call MsgBox(strData)
	  '
   End If
   '
End Sub
'
Private Sub Winsock_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
   '
   ' An error has occurred somewhere. Log the event, and shutdown the connection.
   Call lstEvents.AddItem(Description)
   Call lstEvents.AddItem("Shutting down")
   '
   Call Winsock.Close
   blnTransferring = False
   '
End Sub
'
' ------------------------------------------------------------------------------
' EOF.
' ------------------------------------------------------------------------------
'


Is This A Good Question/Topic? 0
  • +

Page 1 of 1