Pokušavam i poluđeh. :disturbed: Jasan mi je princip ali ne i implementacija. Ne mogu nać gotovi kod. Ako sam dobro razumio: Klijent može vazda poslat poruku serveru jer su adresa i port poznati. (Svejedno je ima li server globalnu IP adresu ili je iza routera koji proslijeđuje pakete za fiksiran port, zar ne?) Klijent je iza routera (recimo javni wireless) i klijent inicira vas promet. Zaključujem:
- Klijent šalje pakete non-stop i svaki put privremeno oslobađa jedan port za komunikaciju.
- Server sluša non-stop, ali odgovara samo ako ima šta reć.
Meni nije jasno na kojem nivou ovo treba radit. Pokušao sam sa ovakvim kodom unutra odgovarajućih threadova.
Code:
' SERVER CODE
server = New TcpListener(IPAddress.Any, 18951)
server.Start()
Dim buffer(512) As Byte
Dim Message() As Byte = UTF8.GetBytes("Hello.")
While True
Dim client As TcpClient = server.AcceptTcpClient()
Dim stream As NetworkStream = client.GetStream()
Dim i As Integer = stream.Read(buffer, 0, buffer.Length)
If i <> 0 And ValidRequest(buffer) Then
stream.Write(message, 0, message.Length)
End If
stream.Close()
client.Close()
End While
Code:
' CLIENT CODE
Dim buffer(512) As Byte
Dim Data() As Byte = UTF8.GetBytes("VALID REQUEST")
While True
Dim client = New TcpClient(SERVER_IP, 18951)
Dim stream As NetworkStream = client.GetStream()
stream.Write(Data, 0, Data.Length)
Dim i As Integer = stream.Read(buffer, 0, buffer.Length)
If i <> 0 Then
Console.WriteLine(UTF8.GetString(Data))
End If
stream.Close()
client.Close()
End While
Ukratko, klijent radi stream.Write(), a server stream.Read() pa stream.Write(), ali to vjerojatno nije to jer sam opet primio:
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond X.X.X.X:18951
Nije mi jasno zašto je tako teško nać kod. Ovo je moralo trebat nekome i prije mene.
Bookmarks