Advertisement
Guest User

Untitled

a guest
Apr 19th, 2014
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.53 KB | None | 0 0
  1. Imports System.Net.Sockets
  2. Imports System.IO
  3. Imports System.Net
  4.  
  5. ' TCP-MultiServer
  6. ' C 2009 - Vincent Casser
  7.  
  8. Module Module1
  9. Private server As TcpListener
  10. Private client As New TcpClient
  11. Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000) ' eingestellt ist port 8000. dieser muss ggf. freigegeben sein!
  12. Private list As New List(Of Connection)
  13.  
  14. Private Structure Connection
  15. Dim stream As NetworkStream
  16. Dim streamw As StreamWriter
  17. Dim streamr As StreamReader
  18. Dim nick As String ' natürlich optional, aber für die identifikation des clients empfehlenswert.
  19. End Structure
  20.  
  21. Private Sub SendToAllClients(ByVal s As String)
  22. For Each c As Connection In list ' an alle clients weitersenden.
  23. Try
  24. c.streamw.WriteLine(s)
  25. c.streamw.Flush()
  26. Catch
  27. End Try
  28. Next
  29. End Sub
  30.  
  31. Sub Main()
  32. Console.WriteLine("Der Server läuft!")
  33. server = New TcpListener(ipendpoint)
  34. server.Start()
  35.  
  36. While True ' wir warten auf eine neue verbindung...
  37. client = server.AcceptTcpClient
  38.  
  39. Dim c As New Connection ' und erstellen für die neue verbindung eine neue connection...
  40. c.stream = client.GetStream
  41. c.streamr = New StreamReader(c.stream)
  42. c.streamw = New StreamWriter(c.stream)
  43.  
  44. c.nick = c.streamr.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen.
  45.  
  46. list.Add(c) ' und fügen sie der liste der clients hinzu.
  47. Console.WriteLine(c.nick & " has joined.")
  48. SendToAllClients(c.nick & " has joined.")
  49. ' falls alle anderen das auch lesen sollen können, an alle clients weiterleiten. siehe SendToAllClients
  50.  
  51. Dim t As New Threading.Thread(AddressOf ListenToConnection)
  52. t.Start(c)
  53. End While
  54. End Sub
  55.  
  56. Private Sub ListenToConnection(ByVal con As Connection)
  57. Do
  58. Try
  59. Dim tmp As String = con.streamr.ReadLine ' warten, bis etwas empfangen wird...
  60. Console.WriteLine(con.nick & ": " & tmp)
  61. SendToAllClients(con.nick & ": " & tmp) ' an alle clients weitersenden.
  62.  
  63. Catch ' die aktuelle überwachte verbindung hat sich wohl verabschiedet.
  64. list.Remove(con)
  65. Console.WriteLine(con.nick & " has exit.")
  66. SendToAllClients(con.nick & " has exit.")
  67. Exit Do
  68. End Try
  69. Loop
  70. End Sub
  71. End Module
  72.  
  73. Imports System.Net.Sockets
  74. Imports System.IO
  75.  
  76. Public Class Form1
  77. Private stream As NetworkStream
  78. Private streamw As StreamWriter
  79. Private streamr As StreamReader
  80. Private client As New TcpClient
  81. Private t As New Threading.Thread(AddressOf Listen)
  82. Private Delegate Sub DAddItem(ByVal s As String)
  83. Private nick As String = "unknown"
  84. Private serverip As String = "127.0.0.1"
  85.  
  86. Private Sub AddItem(ByVal s As String)
  87. ListBox1.Items.Add(s)
  88. End Sub
  89. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
  90.  
  91. End Sub
  92. Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
  93. Try
  94. client.Connect(serverip, 8000) ' hier die ip des servers eintragen.
  95. ' da dieser beim testen wohl lokal läuft, hier die loopback-ip 127.0.0.1.
  96. If client.Connected Then
  97. Label1.Text = "Verbunden!"
  98. Label1.ForeColor = Color.Green
  99. Button1.Enabled = True
  100. TextBox1.Enabled = True
  101. Button2.Enabled = False
  102. stream = client.GetStream
  103. streamw = New StreamWriter(stream)
  104. streamr = New StreamReader(stream)
  105.  
  106. streamw.WriteLine(nick) ' das ist optional.
  107. streamw.Flush()
  108.  
  109. t.Start()
  110. Else
  111. 'MessageBox.Show("Verbindung zum Server nicht möglich!")
  112. 'Application.Exit()
  113. Label1.Text = "Verbindung zum Server nicht möglich!"
  114. Label1.ForeColor = Color.Red
  115. Button1.Enabled = False
  116. TextBox1.Enabled = False
  117. Button2.Enabled = True
  118. End If
  119. Catch ex As Exception
  120. 'MessageBox.Show("Verbindung zum Server nicht möglich!")
  121. 'Application.Exit()
  122. Label1.Text = "Verbindung zum Server nicht möglich!"
  123. Label1.ForeColor = Color.Red
  124. Button1.Enabled = False
  125. TextBox1.Enabled = False
  126. Button2.Enabled = True
  127. End Try
  128. End Sub
  129.  
  130. Private Sub Listen()
  131. While client.Connected
  132. Try
  133. Me.Invoke(New DAddItem(AddressOf AddItem), streamr.ReadLine)
  134. Catch
  135. Label1.Text = "Verbindung zum Server nicht möglich!"
  136. Label1.ForeColor = Color.Red
  137. Button1.Enabled = False
  138. TextBox1.Enabled = False
  139. Button2.Enabled = True
  140. End Try
  141. End While
  142. End Sub
  143.  
  144. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  145. streamw.WriteLine(TextBox1.Text)
  146. streamw.Flush()
  147. TextBox1.Clear()
  148. End Sub
  149.  
  150. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  151. nick = InputBox("Nickname: ", "Namen festlegen", "unknown")
  152. serverip = InputBox("Server IP: ", "Server IP", "127.0.0.1")
  153. End Sub
  154.  
  155.  
  156. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement