Отправляем данные мы при помощи функции SendTo(b, ep) экземпляра класса Socket, где b — массив байт (наши данные), а ep — конечная точка (экземпляр класса System.Net.IPEndPoint, для инициализации которого нужно знать IP-адрес и порт адресата).
При загрузке формы запускается таймер, в обработчике события Tick которого мы опрашиваем порт нашей машины, на который должны поступить ответные данные, и получаем их при помощи функции Receive(ep) экземпляра класса UdpClient.
IP-адрес 127.0.0.1 — это так называемая петля. Т.е. данные, отправленные на этот адрес, возвращаются нам.
Полный код формы приведён ниже:
Public Class Form1 Private lport As Integer Private udpc As Net.Sockets.UdpClient Private soc As Net.Sockets.Socket Private sent As Boolean = False Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load lport = 9999 udpc = New Net.Sockets.UdpClient(lport) soc = New Net.Sockets.Socket(Net.Sockets.AddressFamily.InterNetwork, Net.Sockets.SocketType.Dgram, Net.Sockets.ProtocolType.Udp) If ComboBox1.Items.Count > 0 Then ComboBox1.SelectedIndex = 0 TextBox2.Select() Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If udpc.Available > 0 Then Dim ep As New Net.IPEndPoint(Net.IPAddress.Any, lport) Dim b = udpc.Receive(ep) Dim txt = System.Text.Encoding.Unicode.GetString(b) TextBox1.Text &= String.Format("{0:HH:mm:ss} from [{1}]:{3}{2}{3}----------------------------{3}", Now, ep.ToString, txt, ControlChars.NewLine) End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If TextBox2.Text.Length > 0 AndAlso ComboBox1.Text.Length > 0 Then Dim b = System.Text.Encoding.Unicode.GetBytes(TextBox2.Text) Dim ipadr = Net.IPAddress.Parse("127.0.0.1") Net.IPAddress.TryParse(ComboBox1.Text, ipadr) Dim ep As New Net.IPEndPoint(ipadr, lport) soc.SendTo(b, ep) TextBox1.Text &= String.Format("{0:HH:mm:ss} Me (to [{1}]):{3}{2}{3}----------------------------{3}", Now, ep.ToString, TextBox2.Text, ControlChars.NewLine) TextBox2.Text = "" TextBox2.Select() If Not ComboBox1.Items.Contains(ComboBox1.Text) Then ComboBox1.Items.Add(ComboBox1.Text) End If End Sub Private Sub TextBox2_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown If e.Control AndAlso e.KeyCode = Keys.Enter Then Button1_Click(Nothing, Nothing) sent = True End If End Sub Private Sub TextBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged If sent Then TextBox2.Text = "" sent = False End If End Sub Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged TextBox1.SelectionStart = TextBox1.Text.Length - 1 TextBox1.SelectionLength = 1 TextBox1.ScrollToCaret() End Sub Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Timer1.Stop() udpc.Close() soc.Close() End Sub End Class
Архив с проектом Visual Studio:
NetTest.zip (105 КБ) |
Спс, попробую написать по вашим наработкам в скором времени чат)
ОтветитьУдалитьХорошо!)) Если на C# будете делать, думаю, с переводом проблем не должно возникнуть.))
ОтветитьУдалить