Befehle vom Server soll in Client verarbeitet werden

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Master14785.

    Befehle vom Server soll in Client verarbeitet werden

    Hallo,

    ich will mir in VB.NET ein Programm bauen mit dem ich Befehle auf dem Server eingebe und auf dem Client empfangen kann.
    Ich möchte also zum Beispiel auf dem Server den Befehl cmd eingeben und der Client soll dann die Eingabeaufforderung öffnen.
    Leider funktioniert dies noch nicht. Wenn ich auf dem Server den Befehl cmd eingebe.
    Kommt auf dem Client die Fehlermeldung, dass ein ungültiges Argument eingegeben wurde.

    Hier der Code vom Server:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim Socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    3. Socket.Connect("192.168.80.80", 900)
    4. Socket.Send(System.Text.Encoding.UTF8.GetBytes(TextBox1.Text))
    5. End Sub


    und vom Client:



    VB.NET-Quellcode

    1. Imports System.Threading
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. Dim Thread As New Threading.Thread(AddressOf Commands)
    5. Thread.Start()
    6. End Sub
    7. Sub Commands()
    8. Dim Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    9. Dim EndPoint As New IPEndPoint(IPAddress.Any, 900)
    10. While True
    11. Do
    12. Socket.Listen(10) 'Hier kommt der Fehler
    13. EndPoint = Socket.RemoteEndPoint
    14. Socket.Bind(EndPoint)
    15. Dim ByteData(1024) As Byte
    16. Socket.Accept()
    17. Dim Length As Integer = Socket.Receive(ByteData)
    18. Dim strgData As String = System.Text.Encoding.ASCII.GetString(ByteData, 0, Length)
    19. If strgData <>"" Then
    20. Process.Start("cmd", "/c " & strgData)
    21. Socket.Close()
    22. End If
    23. Loop
    24. End While
    25. End Sub



    Ich hoffe ihr könnt mir helfen.
    While True
    und
    Do Loop

    in einem... Was ein Fail! :D

    Also...
    Beim Client braucht man kein .Listen(), 10 ist der Backlog und sagt an wieviele Verbindungen gleichzeitig verarbeitet werden können (also ich verbinde mit 20 clients, dann muss der server erstmal 10 verarbeiten bis er mit den anderen 10 weitermachen kann..)

    #edit
    anscheinend verwechselst du Client mit Server (xDDDDDD)
    Danke für die Tipps.

    mein client Code sieht nun so aus:

    VB.NET-Quellcode

    1. Sub Commands()
    2. Dim Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    3. Dim EndPoint As New IPEndPoint(IPAddress.Any, 900)
    4. While True
    5. EndPoint = Socket.RemoteEndPoint
    6. Socket.Bind(EndPoint)
    7. Socket.Listen(10)
    8. Dim ByteData(1024) As Byte
    9. Socket.Accept()
    10. Dim Length As Integer = Socket.Receive(ByteData)
    11. Dim strgData As String = System.Text.Encoding.ASCII.GetString(ByteData, 0, Length)
    12. If strgData <>"" Then
    13. Process.Start("cmd", "/c " & strgData)
    14. Socket.Close()
    15. End If
    16. End While
    17. End Sub


    Nun bekomme ich einen Fehler bei

    VB.NET-Quellcode

    1. Socket.Bind(EndPoint)
    das der Wert nicht NULL sein darf.

    VB.NET-Quellcode

    1. EndPoint = Socket.RemoteEndPoint
    2. 'Du weist also der Variable "EndPoint" den Wert von "Socket.RemoteEndPoint" zu, der in diesem Fall NULL ist.
    3. Socket.RemoteEndPoint = EndPoint


    Grundlagen nochmal wiederholen!

    Und nimm das mal aus der While True Schleife und schreibs über sie.

    VB.NET-Quellcode

    1. Socket.Bind(EndPoint)
    2. Socket.Listen(10)
    Okay,

    Ich erhalte aber beim Client noch einen Fehler. Wenn ich einen Befehl sende zum Beispiel "ping 127.0.0.1" dann kommt beim Client ein Fehler in der Zeile

    VB.NET-Quellcode

    1. Dim Length As Integer = Socket.Receive(ByteData)
    mit der Meldung:
    Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde

    Was ist daran falsch?
    Danke für den Tipp.

    Jetzt kommt der Befehl beim Client an. Allerdingsmit dem Fehler, dass auf das verworfene Objekt kann nicht zugegriffen werden kann.

    Hier mein Client-Code:

    VB.NET-Quellcode

    1. Sub Commands()
    2. Dim Socket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    3. Dim EndPoint As New IPEndPoint(IPAddress.Any, 900)
    4. Socket.Bind(EndPoint)
    5. Socket.Listen(10)
    6. While True
    7. Dim ByteData(1024) As Byte
    8. Dim s As Socket = Socket.Accept()
    9. Dim Length As Integer = s.Receive(ByteData)
    10. Dim strgData As String = System.Text.Encoding.ASCII.GetString(ByteData, 0, Length)
    11. If strgData <>"" Then
    12. Process.Start("cmd", "/c " & strgData)
    13. Socket.Close()
    14. End If
    15. End While


    Zeile:

    VB.NET-Quellcode

    1. Dim s As Socket = Socket.Accept()

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Master14785“ ()