TCP Server Client vbs und vb.net

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Mono.

    TCP Server Client vbs und vb.net

    Hallo,


    ich bräuchte einmal eure Hilfe und zwar habe ich einen Server
    und Client der per TCP Nachrichten Versenden sollen.


    TCP Client : sendet eine Nachricht default „ TÜR OFFEN“ (client.vbs) muss ein vbs script sein !



    VB.NET-Quellcode

    1. Const RemoteHost = "127.0.0.4"
    2. Const RemotePort = 8000
    3. Const DataToSend = "TUER OFFEN"
    4. set Winsock=CreateObject("MSWinsock.Winsock")
    5. winsock.RemoteHost = RemoteHost
    6. winsock.RemotePort = RemotePort
    7. winsock.Connect
    8. Sub winsock_Connect()
    9. winsock.SendData CStr(DataToSend)
    10. End Sub
    11. winsock.Close()






    TCP Server Programm soll diese Nachricht empfangen und
    ausgeben in der Listbox (server.exe)

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.Threading
    3. Imports System.ComponentModel
    4. Imports System.Net.Sockets
    5. Imports System.Windows.Forms
    6. Imports System
    7. Public Class Form1
    8. Delegate Sub setTextCallback(ByVal txt As String)
    9. Private serversocket As System.Net.Sockets.Socket
    10. Private clientsocket As System.Net.Sockets.Socket
    11. Public Event updatetext(ByVal str As String)
    12. Private Sub myevent_update(ByVal str As String) Handles Me.updatetext
    13. ListBox1.Items.Add(str)
    14. End Sub
    15. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    16. Dim myip As IPAddress = IPAddress.Parse("127.0.0.4")
    17. Dim port As Integer = 8001
    18. Dim info As New IPEndPoint(myip, port)
    19. Dim clientconnect As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    20. Try
    21. clientconnect.Connect(info)
    22. Dim mybytes(1024) As Byte
    23. Dim mystr As String = TextBox1.Text
    24. mybytes = System.Text.Encoding.ASCII.GetBytes(mystr)
    25. clientconnect.Send(mybytes, mybytes.Length, SocketFlags.None)
    26. ListBox1.Items.Add("Server: " + mystr)
    27. Catch ex As Exception
    28. MsgBox(ex.StackTrace.ToString)
    29. End Try
    30. End Sub
    31. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    32. serversocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    33. Dim myip As IPAddress = IPAddress.Parse("127.0.0.4")
    34. Dim port As Integer = 8000
    35. Dim info As New IPEndPoint(myip, port)
    36. serversocket.Bind(info)
    37. serversocket.Listen(50)
    38. Dim readthread As New Thread(New ThreadStart(AddressOf myread))
    39. readthread.Start()
    40. End Sub
    41. Private Sub myread()
    42. Do While True
    43. clientsocket = serversocket.Accept()
    44. Dim bytes(1024) As Byte
    45. Dim i As Integer = clientsocket.Receive(bytes, 0, clientsocket.Available, SocketFlags.None)
    46. Dim msg As String = "Client: " + System.Text.Encoding.ASCII.GetString(bytes, 0, i)
    47. 'RaiseEvent updatetext(msg)
    48. Me.SetText(msg)
    49. Loop
    50. End Sub
    51. Private Sub SetText(ByVal txt As String)
    52. If Me.ListBox1.InvokeRequired Then
    53. Dim d As New setTextCallback(AddressOf SetText)
    54. Me.Invoke(d, New Object() {txt})
    55. Else
    56. Me.ListBox1.Items.Add(txt)
    57. End If
    58. End Sub
    59. End Class






    Das einzige Problem ist nur das der Server nur empfängt das
    der Client was gesendet hat nicht die Nachricht, was muss geändert werden ? Weiß
    da jemand bescheid.





    Beste Grüße Danke
    Hi.

    Als erstes würde ich die Serverfunktionalität in eine Klasse auslagern.
    Diese bedienst du dann über die Formklasse und reagierst auf Events.

    Das VBScript würde bei mir eher so aussehen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim Winsock
    2. Const SckClosed = 0
    3. Const SckOpen = 1
    4. Const SckListening = 2
    5. Const SckConnectionPending = 3
    6. Const SckResolvingHost = 4
    7. Const SckHostResolve = 5
    8. Const SckConnecting = 6
    9. Const SckConnected = 7
    10. Const SckClosing = 8
    11. Const SckError = 9
    12. Const RemoteHost = "127.0.0.1"
    13. Const RemotePort = 8000
    14. Const DataToSend = "TUER OFFEN"
    15. Call Main
    16. Sub Main
    17. Set Winsock = WScript.CreateObject("MSWinsock.Winsock","winsock_")
    18. winsock.RemoteHost = RemoteHost
    19. winsock.RemotePort = RemotePort
    20. winsock.Connect
    21. Do While Winsock.State = SckConnecting
    22. WScript.Sleep 1000
    23. Loop
    24. If Winsock.State = SckError Then
    25. WSH.Echo "Fehler beim Verbinden"
    26. Elseif Winsock.State = SckConnected Then
    27. WSH.Echo "Verbunden"
    28. End If
    29. Winsock.Close
    30. End Sub
    31. Sub winsock_Connect()
    32. Winsock.SendData DataToSend
    33. End Sub


    Der Server sollte so aussehen wie hier
    Den Server im Link kannst du sogar direkt verwenden für dein Script.

    Gruss Mono
    Das ist meine Signatur und sie wird wunderbar sein!