我有一台服务器,它有两种类型的服务:一种由TCP / IP服务器线程提供,另一种由多种(可变)串行外设提供;对于TCP / IP服务器,我正在使用框架中的标准System.Net.Sockets.TcpListener
对象,而对于串行外围设备,我正在使用标准System.IO.Ports.SerialPort
对象。
当我有一个服务,但另一个没有问题,一切正常,但当我需要一起使用这两个服务时,TCP服务器开始变得没有响应,只获取它通常需要的一些不同的消息
作为一个注释,我已经尝试使用Wireshark来嗅探底层的tcp流量,因为我没有怀疑,tcp流量甚至没有生成(或由LAN物理卡读取);我不明白我现在需要做什么。
谢谢大家!
Imports System.Net
Imports System.Net.Sockets
Imports System.IO.Ports.SerialPort
Public Class Form1
Private WithEvents mSerial As System.IO.Ports.SerialPort
Private mTcpServer As System.Net.Sockets.TcpListener
Private tcpThread As Threading.Thread
Sub main() Handles Me.Load
Open(1)
Dim idAdd As IPAddress = IPAddress.Any
mTcpServer = New TcpListener(idAdd, 41000)
mTcpServer.Start()
tcpThread = New Threading.Thread(AddressOf TcpRollingThread)
tcpThread.Start()
tcpThread.Join()
End Sub
Private Sub TcpRollingThread()
Do
mTcpServer.AcceptTcpClient()
Console.WriteLine("Tcp received")
Loop
End Sub
Private Sub dataReceived_handler(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles mSerial.DataReceived
Console.WriteLine("Serial bytes received: " + mSerial.BytesToRead.ToString())
End Sub
Public Function Open(ByVal port As Integer) As Boolean
If port > 0 Then
Try
mSerial = New System.IO.Ports.SerialPort("COM" + port.ToString)
With mSerial
.BaudRate = 9600
.DataBits = 8
.StopBits = IO.Ports.StopBits.One
.Parity = IO.Ports.Parity.None
.ReceivedBytesThreshold = 1
.Open()
End With
Catch ex As Exception
Return False
End Try
Return True
End If
Return False
End Function
End Class
这里是代码的一部分:当我期待很少的数据(例如2-3个字节)时,连接到达:当我期待更多(16到20个字节)时,连接不显示自己但是我相信它会在另一端开始。