Name:
StreamPlay
Beschreibung:
StreamPlay besteht aus zwei Teilen. Ein Teil liegt auf dem Computer und der andere als App auf dem Anroid-Gerät. Mit AirPlay ist es möglich, auf dem Computer gespeicherte Musik auf dem Smartphone abzuspielen und zu speichern.
Screenshot(s):
Computer:
Smartphone:
Source Code:
Damit jeder den Code zu verwenden kann, wie er will und der gesamte Code etwas unübersichtlich wäre, kommt hier jetzt nur der erwähnenswerte Teil:
PC:
Hier die Klasse für den TCP-Server, der auf die Vorlage von diesem hier beruht: Multiserver (TCP)
TCP-Server
Der Server wird dann so gestartet und eine liste der Titel erstellt:
Server starten
Wenn das Smartphone connected, sendet das Programm eine Liste aller Titel
Verbinden
Smartphone:
Wenn sich das Handy verbindet, sendet der TCP Server eine Liste aller Dateien.
So sieht die Verbindung mittels eines TCP-Clients bei B4A aus:
TCP-Client
Hier können nun Musik-Titel, Kommandos und Dateien empfangen werden:
Zu beachten: Die Titel werden samt Bytelength gesendet, damit man nachher weiß, wann die Datei fertig angekommen ist
Bytes empfangen
Das waren nun so die grundlegenden Sachen mit denen ihr nun so weiterarbeiten könnt, wie ihr wollt. Viel Spaß
ToDo:
-Delay entfernen
-Pause ✓
-Design ändern ✓
-Umbenennen ✓
-Ohne HTTP-Server ✓
-Code vereinfacht und verschönert ✓
Verwendete Programmiersprache(n) und IDE(s):
Visual Basic .NET / IDE VB 2013 Comunity / Basic 4 Android
Systemanforderungen:
Framework 4.0
Download(s):
Programm: StreamPlay.rar ~143 kb
App: StreamPlay App.rar ~305 kb
Lizenz/Weitergabe:
Freeware, OpenSource
StreamPlay
Beschreibung:
StreamPlay besteht aus zwei Teilen. Ein Teil liegt auf dem Computer und der andere als App auf dem Anroid-Gerät. Mit AirPlay ist es möglich, auf dem Computer gespeicherte Musik auf dem Smartphone abzuspielen und zu speichern.
Screenshot(s):
Computer:
Smartphone:
Source Code:
Damit jeder den Code zu verwenden kann, wie er will und der gesamte Code etwas unübersichtlich wäre, kommt hier jetzt nur der erwähnenswerte Teil:
PC:
Hier die Klasse für den TCP-Server, der auf die Vorlage von diesem hier beruht: Multiserver (TCP)
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.IO
- Imports System.Net
- Public Class TCPServer
- Private server As TcpListener
- Private client As New TcpClient
- Private ipendpoint As IPEndPoint
- Private list As New List(Of Connection)
- Private Structure Connection
- Dim stream As NetworkStream
- Dim streamw As StreamWriter
- Dim streamr As StreamReader
- Dim nick As String
- End Structure
- Dim _caller As Form
- Event ClientConnected(Name As String)
- Event ClientDisconnected(Name As String)
- Event MessageRecieved(Text As String)
- Public Sub New(caller As Form, port As Integer)
- ipendpoint = New IPEndPoint(IPAddress.Any, port)
- _caller = caller
- End Sub
- Private Delegate Sub DAddItem(ByVal s As String)
- Private Delegate Sub DDelItem(ByVal s As String)
- Private Delegate Sub DNewMsg(ByVal t As String)
- Private Sub AddItem(ByVal s As String)
- RaiseEvent ClientConnected(s)
- End Sub
- Private Sub DelItem(ByVal s As String)
- RaiseEvent ClientDisconnected(s)
- End Sub
- Private Sub NewMsg(t As String)
- RaiseEvent MessageRecieved(t)
- End Sub
- Public Sub SendFile(ByVal Path As String)
- Try
- For Each c As Connection In list
- Dim fstm As Stream = New FileStream(Path, FileMode.Open, FileAccess.Read)
- Dim buffer(1023) As Byte
- Do
- Dim bytesRead As Integer = fstm.Read(buffer, 0, buffer.Length)
- If bytesRead = 0 Then Exit Do
- c.stream.Write(buffer, 0, bytesRead)
- c.stream.Flush()
- Loop
- fstm.Close()
- Next
- Catch ex As Exception
- End Try
- End Sub
- Public Sub SendText(ByVal Text As String)
- Try
- For Each c As Connection In list
- c.streamw.WriteLine(Text)
- c.streamw.Flush()
- Next
- Catch ex As Exception
- End Try
- End Sub
- Private Sub Starter()
- server = New TcpListener(ipendpoint)
- server.Start()
- While True
- client = server.AcceptTcpClient
- Dim c As New Connection
- c.stream = client.GetStream
- c.streamr = New StreamReader(c.stream)
- c.streamw = New StreamWriter(c.stream)
- c.nick = c.streamr.ReadLine
- If Not c.nick = "" Then
- list.Add(c)
- _caller.Invoke(New DAddItem(AddressOf AddItem), c.nick)
- Dim t As New Threading.Thread(AddressOf ListenToConnection) With {.IsBackground = True}
- t.Start(c)
- End If
- End While
- End Sub
- Public ReadOnly Property Clients As List(Of String)
- Get
- Dim names As New List(Of String)
- For Each c As Connection In list
- names.Add(c.nick)
- Next
- Return names
- End Get
- End Property
- Public Sub Start()
- Dim t As New Threading.Thread(AddressOf Starter) With {.IsBackground = True}
- t.Start()
- End Sub
- Private Sub ListenToConnection(ByVal con As Connection)
- Do
- Try
- Dim tmp As String = con.streamr.ReadLine
- If Not String.IsNullOrEmpty(tmp) Then
- _caller.Invoke(New DNewMsg(AddressOf NewMsg), tmp)
- Else
- _caller.Invoke(New DDelItem(AddressOf DelItem), con.nick)
- list.Remove(con)
- Exit Do
- End If
- Catch ex As Exception
- End Try
- Loop
- End Sub
- End Class
Der Server wird dann so gestartet und eine liste der Titel erstellt:
VB.NET-Quellcode
- WithEvents TcpServer As New TCPServer(Me, My.Settings.Port)
- For Each file In System.IO.Directory.GetFiles(My.Settings.Path)
- Dim fileinfo As New FileInfo(file)
- If Not fileinfo.Attributes.ToString.Contains("Hidden") And Not fileinfo.Attributes.ToString.Contains("System") Then
- If file.EndsWith(".mp3") Then
- tcpfiles.Add("song:" & System.IO.Path.GetFileNameWithoutExtension(file) & "*" & System.IO.File.ReadAllBytes(file).Length)
- End If
- End If
- Next
- TcpServer.Start()
Wenn das Smartphone connected, sendet das Programm eine Liste aller Titel
VB.NET-Quellcode
- Public Sub Client_Connected(Name As String) Handles TcpServer.ClientConnected
- Dim t As New Threading.Thread(AddressOf sendlist) With {.IsBackground = True}
- t.Start()
- DevicesList.Items.Add(Name)
- End Sub
- Public Sub sendlist()
- For Each File In tcpfiles
- TcpServer.SendText(File)
- Threading.Thread.Sleep(10)
- Next
- End Sub
Smartphone:
Wenn sich das Handy verbindet, sendet der TCP Server eine Liste aller Dateien.
So sieht die Verbindung mittels eines TCP-Clients bei B4A aus:
VB.NET-Quellcode
- Sub Process_Globals
- Dim AStreams As AsyncStreams
- Dim Socket1 As Socket
- End Sub
- Sub Activity_Create(FirstTime As Boolean)
- Socket1.Initialize("Socket1")
- Socket1.Connect(ip,port,1000)
- End Sub
- Sub Socket1_Connected(Successful As Boolean)
- If Successful = True Then
- AStreams.Initialize(Socket1.InputStream,Socket1.OutputStream,"Astreams")
- Dim p As Phone
- Dim name As String
- name = p.Model & CRLF
- Dim buffer() As Byte
- buffer=name.GetBytes("UTF8")
- AStreams.Write(buffer)
- Else
- Activity.Finish
- StartActivity(Retry)
- Socket1.Close
- End If
- End Sub
Hier können nun Musik-Titel, Kommandos und Dateien empfangen werden:
Zu beachten: Die Titel werden samt Bytelength gesendet, damit man nachher weiß, wann die Datei fertig angekommen ist
VB.NET-Quellcode
- Sub AStreams_NewData (Buffer() As Byte)
- Dim msg As String
- msg = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
- Dim text As String = msg.SubString2(0, msg.Length-2)
- If text.StartsWith("song:") Then
- 'Titel in die Liste
- Else if text.StartsWith("pause:") Then
- 'pause
- Else 'Also wenn es kein Kommando gibt, dann sind es die Bytes einer Datei
- Dim out As OutputStream
- out = File.OpenOutput(File.DirRootExternal, "StreamPlay/Data/" & SongsLv.GetItem(selsong) & ".mp3", True) 'das true bedeutet, dass die neuen Bytes an die vorherigen Bytes an die Datei hinten hin geschrieben werden, bis sie ganz ist(die Dateigröße mit der vorher gesendeten Length übereinstimmt)
- out.WriteBytes(Buffer, 0, Buffer.length)
- out.Close
- If File.Size(File.DirRootExternal, "Test.mp3") = songlength Then
- 'Datei fertig geladen
- End If
- End If
- End Sub
Das waren nun so die grundlegenden Sachen mit denen ihr nun so weiterarbeiten könnt, wie ihr wollt. Viel Spaß
ToDo:
-Delay entfernen
-Pause ✓
-Design ändern ✓
-Umbenennen ✓
-Ohne HTTP-Server ✓
-Code vereinfacht und verschönert ✓
Verwendete Programmiersprache(n) und IDE(s):
Visual Basic .NET / IDE VB 2013 Comunity / Basic 4 Android
Systemanforderungen:
Framework 4.0
Download(s):
Programm: StreamPlay.rar ~143 kb
App: StreamPlay App.rar ~305 kb
Lizenz/Weitergabe:
Freeware, OpenSource
Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „xd-franky-5“ ()