Peer to Peer - wo die IP-Adressen der einzelnen PC's im Netzwerk speichern?

  • VB.NET

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

    Peer to Peer - wo die IP-Adressen der einzelnen PC's im Netzwerk speichern?

    Hallo Leute

    Ich hab gerade ein Programm angefangen und möchte ein unabhängiges Peer to Peer (P2P) Netzwerk aufbauen, also ohne zentralen Server. Dazu läuft auf jedem PC ein Server und ein Client gleichzeitig.

    Jetzt ist das problem: ohne festen Server weiss ich die IP-Adresse(n) nicht, mit welcher sich der client verbinden soll...

    Und dann hab ich noch eine andere frage: wie kann ich den server und denn client gleichzeitig starten, weil der server wartet auf verbindung und blockiert dann den rest...

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Net.Sockets
    3. Imports System.Threading
    4. Imports System.Net
    5. Imports System.Text
    6. Public Structure Conn
    7. Dim stream As NetworkStream
    8. Dim streamw As StreamWriter
    9. Dim streamr As StreamReader
    10. Dim nick As String
    11. Dim IP As String
    12. End Structure
    13. '================
    14. ' *** main ***
    15. '================
    16. Public Class Main
    17. Public nick As String
    18. Public myIP As String
    19. Dim serv As New server
    20. Dim clie As New client
    21. Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    22. Dim request As HttpWebRequest = DirectCast(WebRequest.Create("http://nicu96ftp.square7.ch/stuff/ip.php"), HttpWebRequest) 'in dieser Zeile deine URL angeben
    23. Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
    24. Dim reader As StreamReader = New StreamReader(response.GetResponseStream())
    25. myIP = reader.ReadToEnd()
    26. If Not response Is Nothing Then response.Close()
    27. 'server & client starten
    28. End Sub
    29. Public Sub WriteStr(ByVal s As String)
    30. rtb.Text += s & vbCrLf
    31. End Sub
    32. End Class
    33. '==================
    34. ' *** client ***
    35. '==================
    36. Public Class client
    37. Private stream As NetworkStream
    38. Private streamw As StreamWriter
    39. Private streamr As StreamReader
    40. Private client As New TcpClient
    41. Private t As New Thread(AddressOf Listen)
    42. Private Delegate Sub DWriteStr(ByVal s As String)
    43. Public nick As String = "unknown"
    44. Public Sub Start()
    45. Try
    46. client.Connect("127.0.0.1", 44444)
    47. If client.Connected Then
    48. stream = client.GetStream
    49. streamw = New StreamWriter(stream)
    50. streamr = New StreamReader(stream)
    51. streamw.WriteLine(nick & "@" & Main.myIP)
    52. streamw.Flush()
    53. t.Start()
    54. Else
    55. MessageBox.Show("Verbindung zum Server nicht möglich!")
    56. Application.Exit()
    57. End If
    58. Catch ex As Exception
    59. MessageBox.Show("Verbindung zum Server nicht möglich!")
    60. Application.Exit()
    61. End Try
    62. End Sub
    63. Private Sub Listen()
    64. While client.Connected
    65. Try
    66. Main.Invoke(New DWriteStr(AddressOf Main.WriteStr), streamr.ReadLine)
    67. Catch
    68. Main.WriteStr("Verbindung zum Server nicht möglich!")
    69. Application.Exit()
    70. End Try
    71. End While
    72. End Sub
    73. Public Sub SendMsg(ByVal sender As System.Object, ByVal e As System.EventArgs)
    74. streamw.WriteLine(Main.msg.Text)
    75. streamw.Flush()
    76. Main.msg.Clear()
    77. End Sub
    78. End Class
    79. '==================
    80. ' *** server ***
    81. '==================
    82. Public Class server
    83. Private server As TcpListener
    84. Private client As New TcpClient
    85. Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 44444)
    86. Private list As New List(Of Conn)
    87. Public Sub Start()
    88. server = New TcpListener(ipendpoint)
    89. server.Start()
    90. Main.WriteStr("Der Server läuft!")
    91. While True
    92. client = server.AcceptTcpClient
    93. Dim c As New Conn
    94. c.stream = client.GetStream
    95. c.streamr = New StreamReader(c.stream)
    96. c.streamw = New StreamWriter(c.stream)
    97. Dim nickip() As String = c.streamr.ReadLine.Split(CChar("@"))
    98. c.nick = nickip(0)
    99. c.IP = nickip(1)
    100. list.Add(c)
    101. Main.WriteStr(c.nick & " has joined.")
    102. Dim t As New Threading.Thread(AddressOf ListenToConnection)
    103. t.Start(c)
    104. End While
    105. End Sub
    106. Private Sub ListenToConnection(ByVal con As Conn)
    107. Do
    108. Try
    109. Dim tmp As String = con.streamr.ReadLine
    110. Main.WriteStr(con.nick & ": " & tmp)
    111. For Each c As Conn In list
    112. Try
    113. c.streamw.WriteLine(con.nick & ": " & tmp)
    114. c.streamw.Flush()
    115. Catch
    116. End Try
    117. Next
    118. Catch
    119. list.Remove(con)
    120. Main.WriteStr(con.nick & " has exit.")
    121. Exit Do
    122. End Try
    123. Loop
    124. End Sub
    125. End Class


    thx im voraus :) und mfg

    nicu96

    OS: Linux Peppermint & Windows 7
    Processor: AMD Phenom II X6 1055T @ 3.5 GHz
    RAM: 8 GB Kingston ValueRAM
    GFX: NVIDIA GeForce 210