myGully.com

myGully.com (https://mygully.com/index.php)
-   Entwicklung & Programmierung (https://mygully.com/forumdisplay.php?f=72)
-   -   Visual Basic TCP (https://mygully.com/showthread.php?t=3028581)

HammerRei 10.09.13 13:39

Visual Basic TCP
 
Hallo Community

ich möchte mit einer Kamera kommunizieren, scheitere jedoch seit Tagen an der Umsetzung und nehme nun in meiner Not den "Publikumsjoker"

Bitte helft mir ...

Meine Aufgabe:
Schicke an IP Adresse 192.168.100.100 Port:2006 einen Trigger "irgendein String",
dann erhälst du über den Port: 2005 einen String zurück
Edit: Mein Programm wird nicht mit Console sondern über TextBoxen laufen und die Daten speichere ich anschließend auf einem Server.
(Achtung: Unter den Codes 2. Aufgabe)

Code:


Imports System.Net.Sockets
Imports System.IO
Public Class Form1

'Variablen:
Dim stream As NetworkStream
Dim streamw As StreamWriter
Dim streamr As StreamReader
Dim Client As New TcpClient
Dim Client2 As New TcpClient
Dim IP As String = "192.168.100.100"
Dim Port1 As Integer = 2006
Dim Port2 As Integer = 2005

Private Sub Connect(ByVal sender As System.Object, ByVal e As System.EventArgs)
    'Client verbindet sich mit IP: 192.168.100.100 und Port 2006
        Client.Connect(IP, Port1) 
    If Client.Connected Then
                ' Stream verweist auf Client
        stream = Client.GetStream
                ' Stream zum Senden
        streamw = New StreamWriter(stream)
                Client2.Connect(IP, Port2)
                If Client2.Connected Then
                stream = Client.GetStream
                ' Stream zum Empfangen
        streamr = New StreamReader(stream)
                Else
                Call MsgBox("Verbidnung konnte mit " & IP & ":" & Port2 & " nicht aufgebaut werden!")
    Else
        Call MsgBox("Verbidnung konnte mit " & IP & ":" & Port2 & " nicht aufgebaut werden!")
    End If
End Sub

Sub client_send(ByVal text As String)
    streamw.WriteLine(text)
    streamw.Flush()
End Sub

Function client_receive() As String
    client_receive = streamr.ReadLine
End Function
End Class

Oder funktioniert das über

Code:


client_send("Stringtext")
client_receive() = ""
variable zum weiterverarbeiten = client_receive()

(Add: Es gibt ein mitgegebenes Tool. Hier kann ich mich mit dem Gerät verbinden und gebe bei "on request port..." die 2006 ein... Erhalte unter "Response (HEX):" eine "084,082,071,080," Ist das der allgemeine Code der von dem Gerät zu meinem Rechner zurück kommt oder die Umwandlung eines X-Beliebigen Triggers in Hexcode?)

Anschließend erhalte ich mithilfe eines weiteren Triggers über den selben Port ein Array, das mir pro Bit-Position im Array (genannt ByteArray) einen Grauton gibt und sich daraus ein Bild zusammensetzt, das ich aber in ein JPEG Format mit dem oben zurückgegebenen String als Titel abspeichern möchte.
Hierzu gibt mir Google keinen Beispielcode der sich in meinem Anfangsstadium verwenden lässt.

Code:


Private Function BytesToImage(ByVal ImageBytes() As Byte) As Image
    Dim imgNew As Image
    Dim memImage As New System.IO.MemoryStream(ImageBytes)
    imgNew = Image.FromStream(memImage)
    Return imgNew
End Function

[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

HammerRei 10.09.13 16:51

1. Aufgabe
Ich benötige einen strukturierten funktionierenden Code mit Kommentaren, wo ich meine IP und wo den Port reinschreiben kann. Wie ich einen Trigger versende (String1 ist mir bekannt) und den zurückgelieferten String auf einen anderen Port:2005 abgreife und in eine Variable schreibe.

2. Aufgabe
Wie speichere ich einen ByteArray über Port:2005 ab (Trigger string2 erneut über Port:2006), konvertiere ihn mit VB-Code zu JPEG und speichere das JPEG mit entsprechenden Dateinamen im Pfad C:/xy/ ab.

HammerRei 10.09.13 18:21

Schön wäre es, wenn es Hausaufgabe wäre und ich sie einfach vergessen könnte, aber aus dem Alter bin ich raus.

Mein Code bringt mir kein Ergebnis zurück und ich finde seit Tagen dafür keine Lösung.

Ein Bytearray würde ähnlich ausgelesen werden wie der string, nur fehle mir dafür die korrekte Syntax

HammerRei 10.09.13 19:50

Ferienjob als Informatik Student. Da ich erst im 2. Semester bin, keine Erfahrung mit objektorientierten Programmiersprachen habe und auch sonst nie über Netzwerk kommuniziert hatte, bin ich von der Aufgabe einfach nur überfordert und bin nach Tagelang googlen an mein Ende gestoßen.

Das Programm lässt sich nicht debuggen, da eine von jmd anderen vorprogrammierte Kommunikation mit einem Server stattfindet, an den ich mich nicht verbinden darf. Der Versuch nur einen Teil des Codes in einem neuen Projekt zu verwenden oder die anderen Teile aus dem Programm vorübergehend zu löschen(+save) ist aus mir nicht ergründlichen Faktoren nicht möglich gewesen.
(Das Programm lässt sich in so weit debuggen, dass die Meldung auftritt "Verbindung zum Server nicht möglich", damit ist allerdings nicht die Kamera gemeint)

NetWebs 10.09.13 21:15

Naja, mit den Infos wird man dir schwer helfen können.
Wenn du es vor Ort schon nicht debuggen kannst, wie sollen wir das bewerkstelligen?

Warum gehst du nicht einfach den sinnvollsten Weg und fragst jemanden mit Kenntnissen an deinem Arbeitsplatz?

Vielleicht solltest du auch Tools einsetzen um den Netzwerkverkehr zu analysieren.

HammerRei 10.09.13 21:34

Ich hatte gehofft dass es einen Individuell anpassbaren Code gäbe für
"String über IP Port schicken" und "String über IP Port erhalten"

Dieses Tutorial hier [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] kann ich leider nicht auf meine 2 unterschiedlichen Ports anpassen.

HammerRei 10.09.13 22:07

Also kann man hier keine Hilfe erwarten - danke -.-

NetWebs 10.09.13 22:29

Die Frage ist doch: Wie können wir dir helfen?


Wenn du eine Autopanne hast, erwartet du doch auch nicht, dass der ADAC das Auto am Telefon repariert!
Da hier aber keiner von uns Zugang zu deinem Arbeitsplatz, musst du schon mehr Informationen raus rücken.

Beleidigt sein ist daher kindisch! (Sagtest du nicht du bist aus dem Alter raus?)

HammerRei 11.09.13 07:15

Erwartet hatte ich einen abgeänderten Code, der aussagt: So schickt man einen String über diese IP mit diesem Port ---- So erhält man die Antwort über dden anderen Port zurück. - Sorry

Ich melde mich mit Freudenschreie zurück, da ich den 1. Task zur hälfte gelöst habe

Code:

Public Class Form1

    Private tcpClient As New System.Net.Sockets.TcpClient()

    Public Sub Form1_Show(sender As Object, e As EventArgs) Handles MyBase.Shown
        ' Verbindung mit IP, Port1 aufbauen
        tcpClient.Connect("192.168.100.100", 2006)
        ' Überprüfen, ob verbunden
        If tcpClient.Connected Then
            ' Methode Senden() aufrufen
            Senden()
        Else
            Call MsgBox("Verbindung konnte nicht aufgebaut werden!")
        End If
    End Sub

    Private Sub Senden()
        ' Versenden des ByteArrays
        Dim networkStream As NetworkStream = tcpClient.GetStream()
        Dim sendBytes As [Byte]()
        sendBytes = Encoding.ASCII.GetBytes("TRG" + vbCrLf)
        networkStream.Write(sendBytes, 0, sendBytes.Length)
    End Sub

End Class


HammerRei 13.09.13 08:20

- Code mangels korrekter funktionalität gelöscht -


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.