Hallo,
Ich wollte einen einfachen TCP/IP Server zeigen, der richtig wenig Platz braucht. Der Server erfordert das Microframework. Ich habe alles mit dem Netduino Plus getestet. Ein Server mit nur 7.1x5.3x1.3cm (BxLxH) den man auch für Aktivierungen oder sogar als Webserver ummodifizieren kann.
Hier den Server:
Spoiler anzeigen
Und ein Client zum testen
Spoiler anzeigen
Man kann bei Port9999 auch den Webbrowser benutzen.
mfg
gfcwfzkm
PS: Client und Server-Code wurde geändert. Server: Besserer IP-Check. Client: Kein GoTo + $EXIT-Command
Ich wollte einen einfachen TCP/IP Server zeigen, der richtig wenig Platz braucht. Der Server erfordert das Microframework. Ich habe alles mit dem Netduino Plus getestet. Ein Server mit nur 7.1x5.3x1.3cm (BxLxH) den man auch für Aktivierungen oder sogar als Webserver ummodifizieren kann.
Hier den Server:
VB.NET-Quellcode
- Imports System
- Imports System.Text
- Imports System.Net
- Imports System.Net.Sockets
- Imports System.Threading
- Imports Microsoft.SPOT
- Imports Microsoft.SPOT.Hardware
- Imports SecretLabs.NETMF.Hardware
- Imports SecretLabs.NETMF.Hardware.NetduinoPlus
- '(C) 2013 Pascal Gesell @ gfcwfzkm
- 'Socket-Server
- Module Module1
- Private socket As Socket = Nothing
- Private onb As New OutputPort(Pins.ONBOARD_LED, False)
- Sub Main()
- Debug.EnableGCMessages(True)
- 'Eigene IP ausgeben
- If System.Diagnostics.Debugger.IsAttached Then 'Überprüft, ob er im Debug-Modus ist
- ' Locale IP-Adresse Anzeigen (Nur im Debug-Mode)
- Dim Ips() As Microsoft.SPOT.Net.NetworkInformation.NetworkInterface = Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
- For i As Integer = 0 To Ips.Length - 1 'Solange durchgehen, bis die IP nicht 0.0.0.0 lautet
- If System.Diagnostics.Debugger.IsAttached Then Debug.Print("Netduino-IP:" & Ips(i).IPAddress.ToString())
- Next
- End If
- 'Socket Class initialisieren
- socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
- 'Abhörport wählen (Im Moment 80)
- socket.Bind(New IPEndPoint(IPAddress.Any, 9999))
- 'Anfragen-Listen starten
- socket.Listen(10)
- While True
- Using clientSocket As Socket = socket.Accept()
- 'Client-IP bekommen
- Dim clientIP As IPEndPoint = TryCast(clientSocket.RemoteEndPoint, IPEndPoint)
- Dim clientEndPoint As EndPoint = clientSocket.RemoteEndPoint
- 'int byteCount = cSocket.Available;
- Dim bytesReceived As Integer = clientSocket.Available
- If bytesReceived > 0 Then
- 'Empfangene Daten verarbeiten
- Dim buffer As Byte() = New Byte(bytesReceived - 1) {}
- Dim byteCount As Integer = clientSocket.Receive(buffer, bytesReceived, SocketFlags.None)
- Dim request As New String(Encoding.UTF8.GetChars(buffer))
- Debug.Print("Free RAM: " + Microsoft.SPOT.Debug.GC(False).ToString + " Bytes" + Constants.vbCrLf + "Anfrage von: " + clientIP.ToString + Constants.vbCrLf + request)
- If request.ToUpper = "TOGGLE" Then
- onb.Write(Not onb.Read())
- request = "TOGGLE LED"
- Else
- request = request
- End If
- clientSocket.Send(Encoding.UTF8.GetBytes(request), request.Length, SocketFlags.None)
- End If
- End Using
- End While
- End Sub
- End Module
Und ein Client zum testen
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.Text
- Imports System.Net
- Module Module1
- Dim x As String
- Sub Main()
- Dim client As Socket
- Console.Title = "Netduino Socket-Programm"
- Dim ip As String
- Dim port As String
- Console.WriteLine("Bitte IP-Adresse eingeben.")
- ip = Console.ReadLine().Trim
- Console.WriteLine("Bitte Port eingeben")
- port = Console.ReadLine().Trim
- While (1)
- x = Console.ReadLine()
- If Not x.Trim = Nothing Then
- If x.ToUpper = "$EXIT" Then
- End
- Else
- Dim Data As Byte() = Encoding.ASCII.GetBytes(x) 'Daten (String) in (ASCII)Bytes konvertieren
- Try
- client = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
- Dim portSelect As Integer = Convert.ToInt16(port) 'String "port" zum Integer "portSelect" konvertieren
- client.Bind(New IPEndPoint(IPAddress.Any, 9998)) 'Empfangs-Settings (Port&IP)
- Dim remoteIPAddress As System.Net.IPAddress = System.Net.IPAddress.Parse(ip) 'Ziel-IP
- Dim remoteEndPoint As New System.Net.IPEndPoint(remoteIPAddress, portSelect) 'Ziel-Port
- Console.WriteLine("Sende: " + x)
- client.Connect(remoteEndPoint) 'Zum Netduino verbinden
- client.Send(Data) 'Daten senden
- Dim bytesReceived As Integer 'Empfangsvariable
- While (Not bytesReceived > 0)
- bytesReceived = client.Available
- End While
- Dim buffer As Byte() = New Byte(bytesReceived - 1) {}
- Dim byteCount As Integer = client.Receive(buffer, bytesReceived, SocketFlags.None)
- Dim received As New String(Encoding.ASCII.GetChars(buffer))
- Debug.Print(received & vbCrLf & received.Length)
- Console.WriteLine("Empfangen: " + received)
- client.Close()
- Catch ex As Exception
- Print(ex.ToString, ConsoleColor.Red)
- End Try
- End If
- End If
- x = Nothing
- End While
- End Sub
- End Module
Man kann bei Port9999 auch den Webbrowser benutzen.
mfg
gfcwfzkm
PS: Client und Server-Code wurde geändert. Server: Besserer IP-Check. Client: Kein GoTo + $EXIT-Command
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „gfcwfzkm“ ()