Я не программист, но у меня есть задача создать TCP-сервер (программу, которая прослушивает интерфейсы своей сетевой карты для входящих потоков данных).
Я искал в Интернете и обнаружил, что могу использовать два метода: класс Socket или TCPListener.
Я создал пример для класса Socket, но мне было интересно, как я могу его протестировать?
Если другой компьютер в сети отправляет некоторые строковые данные на компьютер слушателя, то сообщение должно отображаться.
Вот пример от Microsoft, который я использую для TCP-сервера с использованием сокета:
Public Shared Sub Main()
' Data buffer for incoming data.
Dim data = nothing
Dim bytes() As Byte = New [Byte](1024) {}
Dim ipAddress As IPAddress = ipAddress.Any
Dim localEndPoint As New IPEndPoint(ipAddress, 0)
Dim intI As Integer = 0
'Display the NIC interfaces from the listener
For Each ipAddress In ipHostInfo.AddressList
Console.WriteLine("The NIC are {0}", ipHostInfo.AddressList(intI))
intI += 1
Next
Console.WriteLine("You are listening on {0}",localEndPoint)
' Create a TCP/IP socket.
Dim listener As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
' Bind the socket to the local endpoint and
' listen for incoming connections.
Try
listener.Bind(localEndPoint)
listener.Listen(200)
Catch e As SocketException
Console.WriteLine("An application is alreading using that combination of ip adress/port", e.ErrorCode.ToString)
End Try
' Start listening for connections.
While True
Console.WriteLine("Waiting for a connection...")
' Program is suspended while waiting for an incoming connection.
Dim handler As Socket = listener.Accept()
data = Nothing
' An incoming connection needs to be processed.
While True
bytes = New Byte(1024) {}
Dim bytesRec As Integer = handler.Receive(bytes)
data += Encoding.ASCII.GetString(bytes, 0, bytesRec)
Console.WriteLine("The string captured is {0}", data)
If data.IndexOf("something") > -1 Then
Exit While
End If
End While
' Show the data on the console.
Console.WriteLine("Text received : {0}", data)
' Echo the data back to the client.
Dim msg As Byte() = Encoding.ASCII.GetBytes(data)
handler.Shutdown(SocketShutdown.Both)
handler.Close()
End While
End Sub
End Class
Я на правильном пути?
Спасибо
Позже Править:
Я использовал этот код в консольном приложении, созданном с помощью Visual Studio, и хочу проверить сценарий, когда устройство отправляет какое-либо строковое сообщение по сети.
Например:
У меня есть два устройства: компьютер A, компьютер B, подключенный через локальную сеть
Я пробовал эту команду: telnet computerA порт (с компьютера B), но ничего не отображается на TCP-сервере, работающем с компьютера A.
телнет 192.168.0.150 3232
Я также сделал TCP-клиент для тестирования (по примеру Microsoft):
Public Class SynchronousSocketClient
Public Shared Sub Main()
' Data buffer for incoming data.
Dim bytes(1024) As Byte
Dim ipHostInfo As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
Dim ipAddress As IPAddress = ipHostInfo.AddressList(0)
Dim remoteEP As New IPEndPoint(ipAddress, 11000)
' Create a TCP/IP socket.
Dim sender As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
' Connect the socket to the remote endpoint.
sender.Connect(remoteEP)
Console.WriteLine("Socket connected to {0}", _
sender.RemoteEndPoint.ToString())
' Encode the data string into a byte array.
Dim msg As Byte() = _
Encoding.ASCII.GetBytes("This is a test<EOF>")
' Send the data through the socket.
Dim bytesSent As Integer = sender.Send(msg)
' Receive the response from the remote device.
Dim bytesRec As Integer = sender.Receive(bytes)
Console.WriteLine("Echoed test = {0}", _
Encoding.ASCII.GetString(bytes, 0, bytesRec))
' Release the socket.
sender.Shutdown(SocketShutdown.Both)
sender.Close()
Console.ReadLine()
End Sub
End Class 'SynchronousSocketClient
Но это не работает из-за настройки ПОРТА.
Если в TCP-сервере у меня есть «Dim localEndPoint As New IPEndPoint (ipAddress, 0)», то происходит сбой клиента, но если я, например, изменяю порт с любого (0) на 11000, клиент работает нормально.
Ты знаешь почему?
Позже отредактируйте 2:
Может быть, мне следовало начать с этого вопроса: какой метод рекомендуется для моей области применения - асинхронный или синхронный метод?