TCPCoreLib

    • Release
    • Closed Source

    Es gibt 48 Antworten in diesem Thema. Der letzte Beitrag () ist von xd-franky-5.

      Sry, war bei Bekannten aber das gehört hier nicht hin also:
      - Ich habe bY nicht falsch geschrieben sondern es von einem Marken Logo abgeschaut und vllt. ist es sowas wie ein Marken Zeichen ?!
      - Soll ich es jetzt Asynchron machen oder nicht ?
      - Ich versteh nicht warum manche einfach nicht zu einem neuerem VS und Framework greifen wollen. Ihr könnt auch nicht bei Spiele-Hersteller beklagen, dass das Spiel einen besseren Prozessor etc. braucht als ihr habt. Also legt euch ein neues FW und VS zu oder Pech gehabt.

      Im nächsten Update:
      - Statt Stopp, Stop
      - Beschreibung zu den Methoden und Variablen
      - IP als System.Net.IPAddress angeben
      - System.Net.IPAddress auch im Beispiel Projekt
      - Statt CInt, Integer.Parse
      - statt MsgText und co. message ...
      - Englisch überall angewendet (nur die Beispiel Projekte sind auf Deutsch)
      - Datei senden

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „xd-franky-5“ ()

      I/O-gebundenes Threadblocking lässt sich recht einfach vermeiden. EDR hat dazu mal was geschrieben:
      [VB.NET] VersuchsChat mit leistungsfähigem Server

      Noch einfacher ist es natürlich mit TAP (async/await). Dafü rmuss man das aber erstmal können.

      Edit:
      Ich hab da so eine Vermutung:
      Kann man überhaupt text mit Zeilenumbruch schicken?
      Von meinem iPhone gesendet

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „nikeee13“ ()

      Hallo @xd-franky
      ich habe vor kurzer zeit auch mal an einer kleinen NetworkEngine gearbeitet und bin zu dem schluss gekommen das sie einfach nicht genug Funktionen hat um sie zu veröffentlichen wenn du willst kannst du den code weiterverwenden.
      Der Server ist asynchron :)
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Public Class Form1
      2. Public server As New Network_Server
      3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      4. AddHandler server.NewConnection, AddressOf NewConnection
      5. AddHandler server.Newpacked, AddressOf Newpacked
      6. AddHandler server.ConnectionClose, AddressOf ConnectionClose
      7. server.Start(5423)
      8. End Sub
      9. Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
      10. server.Close()
      11. End Sub
      12. Public Sub NewConnection(ByVal c As Network_Server.Client)
      13. Me.Invoke(Sub() RichTextBox1.Text &= "Der User = " & c.McID & " hat die Connection begonnen" & Environment.NewLine)
      14. server.WritetoClient(c, "Hallo Client :)" & Environment.NewLine)
      15. server.ReadDataFromClient(c, Network_Server.Buffersize.SuperHighPacked)
      16. End Sub
      17. Public Sub ConnectionClose(ByVal c As Network_Server.Client)
      18. Me.Invoke(Sub() RichTextBox1.Text &= "Der User = " & c.McID & " hat die Connection geschlossen" & Environment.NewLine)
      19. End Sub
      20. Public Sub Newpacked(ByVal c As Network_Server.Client, ByVal text As String)
      21. Me.Invoke(Sub() RichTextBox1.Text &= text & Environment.NewLine)
      22. End Sub
      23. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
      24. For i = 0 To server.list.Count - 1
      25. server.WritetoClient(server.list.Item(i), TextBox2.Text & Environment.NewLine)
      26. Next
      27. End Sub
      28. End Class
      29. Public Class Network_Server
      30. Public Server As Net.Sockets.TcpListener
      31. Public list As New List(Of Client)
      32. Private IPendPoint As Net.IPEndPoint
      33. Private Stoping As Boolean = False
      34. Private ac As New System.Text.ASCIIEncoding
      35. #Region "Events"
      36. Public Event NewConnection(ByVal client As Network_Server.Client)
      37. Public Event ConnectionClose(ByVal client As Network_Server.Client)
      38. Public Event Newpacked(ByVal client As Network_Server.Client, Text As String)
      39. #End Region
      40. Public Sub Start(ByVal port As Integer)
      41. Me.IPendPoint = New Net.IPEndPoint(System.Net.IPAddress.Any, port)
      42. Server = New Net.Sockets.TcpListener(Me.IPendPoint)
      43. Server.Start()
      44. Server.BeginAcceptSocket(AddressOf ReadClients, Nothing)
      45. End Sub
      46. Private Sub ReadClients(ByVal ar As IAsyncResult)
      47. Dim clientc As Integer = 0
      48. Do
      49. Dim c As New Net.Sockets.TcpClient
      50. c = Server.AcceptTcpClient
      51. Dim ce As New Network_Server.Client()
      52. ce.ipendpoint = CType(c.Client.RemoteEndPoint, Net.IPEndPoint)
      53. ce.stream = c.GetStream()
      54. ce.McID = clientc
      55. clientc += 1
      56. list.Add(ce)
      57. RaiseEvent NewConnection(ce)
      58. Loop Until Stoping = True
      59. End Sub
      60. Private Sub Read_Callback(ar As IAsyncResult)
      61. Dim state As StateObject = CType(ar.AsyncState, StateObject)
      62. If ar.IsCompleted = True Then
      63. Try
      64. state.cl.stream.EndRead(ar)
      65. Catch ex As Exception
      66. RaiseEvent ConnectionClose(state.cl)
      67. list.Remove(state.cl)
      68. End Try
      69. Dim text As String = ac.GetString(state.buffer)
      70. text = text.Replace(Chr(0), "")
      71. If text = String.Empty Then
      72. RaiseEvent ConnectionClose(state.cl)
      73. list.Remove(state.cl)
      74. Else
      75. RaiseEvent Newpacked(state.cl, ac.GetString(state.buffer))
      76. Dim buff(state.buffer.Length) As Byte
      77. state.buffer = buff
      78. state.cl.stream.BeginRead(state.buffer, 0, state.buffer.Length, AddressOf Read_Callback, state)
      79. End If
      80. End If
      81. End Sub
      82. Public Sub ReadDataFromClient(ByVal cl As Network_Server.Client, ByVal count As Integer)
      83. Try
      84. Dim p As New StateObject(count)
      85. p.cl = cl
      86. p.cl.stream.BeginRead(p.buffer, 0, count, AddressOf Read_Callback, p)
      87. Catch ex As Exception
      88. End Try
      89. End Sub
      90. Public Sub WritetoClient(ByVal client As Network_Server.Client, Text As String)
      91. Try
      92. Dim bytes As Byte() = ac.GetBytes(Text)
      93. client.stream.Write(bytes, 0, bytes.Length)
      94. client.stream.Flush()
      95. Catch ex As Exception
      96. End Try
      97. End Sub
      98. Public Sub WritetoClient(ByVal client As Network_Server.Client, bytes As Byte())
      99. Try
      100. client.stream.Write(bytes, 0, bytes.Length)
      101. client.stream.Flush()
      102. Catch ex As Exception
      103. End Try
      104. End Sub
      105. Public Sub Close()
      106. Stoping = True
      107. Server.Stop()
      108. For i = 0 To list.Count - 1
      109. list.Item(i).stream.Close()
      110. Next
      111. list.Clear()
      112. End Sub
      113. Public Class Client
      114. Public stream As Net.Sockets.NetworkStream
      115. Public ipendpoint As Net.IPEndPoint
      116. Public McID As Long
      117. End Class
      118. Public Class StateObject
      119. Public cl As Network_Server.Client
      120. Public buffer() As Byte
      121. Public Sub New(ByVal size As Integer)
      122. Dim buff(size) As Byte
      123. buffer = buff
      124. End Sub
      125. End Class
      126. Public Enum Buffersize
      127. LowLengthPacked = 100
      128. NormalLengthPacked = 500
      129. HighLengthPacked = 1000
      130. SuperHighPacked = 9999
      131. End Enum
      132. End Class
      MFG 0x426c61636b4e6574776f726b426974
      InOffical VB-Paradise IRC-Server
      webchat.freenode.net/
      Channel : ##vbparadise

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BlackNetworkBit“ ()

      Bringt mir nur sehr wenig, wenn ich die zusammenhänge und so in dem Code-Batzen nicht verstehe, weil ich es nicht selber gemacht hab xD Aber trotzdem danke. Vllt. hilft es ja anderen.

      @nikeee13
      Ich hab gerade keine Zeit um es zu testen aber teste du es halt mal. Ich weiß es auf jeden Fall nicht auswendig. Normalerweise schon aber es kann sich eben auch ein Fehler eingeschlichen haben :/
      Dein Konzept ist schon falsch, du schickst Strings und interpretierst diese. Viel besser wär es, wenn man Objekte in den NetworkStream serialisieren würde, und diese am anderen Ende deserialisieren. Somit kannst du Klassen, Dateien, alles mögliche versenden, und das ohne großen Aufwand.
      Im Client bzw Server sitzen spezielle PackageListener<Type> der Server durchläuft alle und schaut ob der Typ des Pakets passt, wenn ja wird dieses an den PackageListener weiter gegeben und dieser macht das irgendwas damit.

      !!! Update !!!

      Geändert wurde:
      - Statt Stopp, Stop
      - Beschreibung zu den Methoden und Variablen
      - IP als System.Net.IPAddress angeben
      - System.Net.IPAddress auch im Beispiel Projekt
      - Statt CInt, Integer.Parse
      - statt MsgText und co. message ...
      - Englisch überall angewendet (nur die Beispiel Projekte sind auf Deutsch)
      - Datei senden

      Wie das angewendet wird, wird in den Beispielen oder im Tutorial beim Hauptpost gezeigt.

      Screenshot(s):



      Download:
      Im Anhang :)

      Hoffe auf Konstruktive Kritik und Fragen sind auch erwünscht :)
      Dateien

      Ohne Netzwerk

      Funktioniert diese Lib auch auf einem PC ohne Netzwerkanschluss. Also mit localhost:<Port> oder 127.0.0.1 als IP? Ich entwickle gerade eine Anwendung auf einem PC ohne Netzwerkanschluss die später ein Netzwerk managen soll. Später wird der PC natürlich einen Anschluss haben, ich will allerdings nicht so lange warten. :D
      Hmkay. :|