Язык Visual Basic на платформе .NET.
Модераторы: Ramzes, Sebas
-
GPP
-
- Постоялец
-
-
- Сообщения: 351
- Зарегистрирован: 02.11.2005 (Ср) 8:02
- Откуда: г.Невельск о.Сахалин
-
GPP » 21.08.2008 (Чт) 2:59
Вот код программы которая слушает определенный порт... Но при запуске зависает! Т.Е не показывает форму приложения... Я думаю дело в цикле... Но как сделать так, чтобы одновременно слушался порт и было видно форму программы... Я слышал что-то про многопоточность... Помогите пожалуйста... Я только начал переходить с VB 6 на .NET. Заранее огромное человеческое СПАСИБО!
- Код: Выделить всё
Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports Microsoft.VisualBasic
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MyTcpListener.Main()
End Sub
End Class
Class MyTcpListener
Public Shared Sub Main()
Try
' Set the TcpListener on port 13000.
Dim port As Int32 = 1001
Dim localAddr As IPAddress = IPAddress.Parse("192.168.1.2")
Dim server As New TcpListener(localAddr, port)
' Start listening for client requests.
server.Start()
' Buffer for reading data
Dim bytes(1024) As [Byte]
Dim data As [String] = Nothing
' Enter the listening loop.
While True
MsgBox("Waiting for a connection... ")
' Perform a blocking call to accept requests.
' You could also user server.AcceptSocket() here.
Dim client As TcpClient = server.AcceptTcpClient()
MsgBox("Connected!")
data = Nothing
' Get a stream object for reading and writing
Dim stream As NetworkStream = client.GetStream()
Dim i As Int32
' Loop to receive all the data sent by the client.
i = stream.Read(bytes, 0, bytes.Length)
While (i <> 0)
' Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
MsgBox(data)
' Process the data sent by the client.
data = data.ToUpper()
Dim msg As [Byte]() = System.Text.Encoding.Default.GetBytes(data)
' Send back a response.
stream.Write(msg, 0, msg.Length)
MsgBox(data.ToString)
i = stream.Read(bytes, 0, bytes.Length)
End While
' Shutdown and end connection
client.Close()
End While
Catch e As SocketException
MsgBox(e)
End Try
MsgBox("Hit enter to continue...")
End Sub 'Main
End Class
-
Williams
-
- Гуру
-
-
- Сообщения: 1280
- Зарегистрирован: 06.05.2008 (Вт) 18:35
- Откуда: System.Reflection.Williams (увидел себя в зеркале :))
Williams » 24.08.2008 (Вс) 15:15
У класса System.Net.Sockets.TcpListener есть асинхронный метод BeginAcceptSocket. Второй вариант - практически любую операцию можно запустить через BackgroundWorker. Следует ознакомится с MSDN, для начала.
И вы думаете, что вас оставят в живых после прочтения этого поста?
Вернуться в Visual Basic .NET
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 97