.net - VB、.Net 非阻塞 TcpClient
问题描述
我有 TCP 侦听器的工作示例,它接收特定端口上的数据并在需要时发送响应。问题是当脚本发送响应时,整个过程都在等待并且不接受新连接。也许有人可以帮助改进代码,以便它开始接受新连接而不会阻塞?
Public Shared Sub test()
Dim listener As TcpListener = Nothing
Dim port As Integer = 555
Try
listener = New TcpListener(IPAddress.Any, port)
listener.Start()
'Buffer for reading data
Dim bytes(1024) As Byte
Dim data As String = Nothing
' Enter the listening loop.
While True
Console.Write("Waiting for a connection... ")
' Perform a blocking call to accept requests.
' You could also use server.AcceptSocket() here.
Dim client As TcpClient = listener.AcceptTcpClient()
Console.WriteLine("Connected!")
data = Nothing
' Get a stream object for reading and writing
Dim stream As NetworkStream = client.GetStream()
' Loop to receive all the data sent by the client.
Dim i As Integer = stream.Read(bytes, 0, bytes.Length)
While (i <> 0)
' Translate data bytes to a ASCII string.
data = Encoding.ASCII.GetString(bytes, 0, i)
Console.WriteLine("Received: {0}", data)
If data.Contains("ppp") Then
Console.WriteLine("Contains ppp")
' Send back a response.
Response(stream, "my_response")
End If
i = stream.Read(bytes, 0, bytes.Length)
End While
' Shutdown and end connection
Console.WriteLine("connection closed")
End While
Catch e As Exception
Console.WriteLine(e)
Finally
If listener IsNot Nothing Then
listener.Stop()
End If
End Try
End Sub
Public Shared Sub Response(stream As Object, message As String)
Dim response As Byte() = Encoding.ASCII.GetBytes(message)
stream.Write(response, 0, response.Length)
Console.WriteLine("response {0} sent", message)
End Sub
解决方案
推荐阅读
- sbt - 获取系统属性在调试日志级别无法正常工作
- memory-leaks - RxJS:在 takeUntil 之后使用重复创建订阅泄漏
- angular - 如何使用 karma jasmine 对依赖于另一个函数的函数进行单元测试
- php - Cookie 不会设置,没有结果
- python - 在 python 中读取德语 csv 文件的问题
- opencv - 来自应用程序的 OpenCv + Gstreamer,初始延迟 30 秒
- amazon-web-services - 确保在 AWS S3 同步期间数据不会丢失
- php - 如何通过 agi php 写入文件?
- php - 明智地显示或隐藏内容用户角色
- python - 获取数组中最大元素的数组索引号的最佳方法