C# 从tcp端口接收数据
我对用于信号捕获的设备(vilistus)有一些问题,因为它的软件应该在捕获期间将数据发送到tcp端口(#123),我使用带有tcp侦听器的c代码从同一端口接收数据,但程序在C# 从tcp端口接收数据,c#,C#,我对用于信号捕获的设备(vilistus)有一些问题,因为它的软件应该在捕获期间将数据发送到tcp端口(#123),我使用带有tcp侦听器的c代码从同一端口接收数据,但程序在accepttcpclient()命令行被阻止,没有接收到数据 TcpClient client = this.tcpListener.AcceptTcpClient(); 听起来好像客户端没有连接到侦听器。当您在TcpListener上调用AcceptTcpClient时,应用程序将挂在那里等待客户端连接,这似乎是您遇到
accepttcpclient()
命令行被阻止,没有接收到数据
TcpClient client = this.tcpListener.AcceptTcpClient();
听起来好像客户端没有连接到侦听器。当您在TcpListener上调用AcceptTcpClient时,应用程序将挂在那里等待客户端连接,这似乎是您遇到的问题 您可以通过执行BeginAcceptTcpClient来解决这个问题,它将释放应用程序,并允许程序在等待客户端时继续执行。当客户端连接时,将调用一个委托,然后您可以开始处理客户端、读取数据等。例如:
class Comms
{
TcpListener listener;
TcpClient client;
// Starts listening for a tcp client
public void StartListener()
{
listener = new TcpListener(IPAddress.Any, 123);
listener.BeginAcceptTcpClient(new AsyncCallback(ClientCallback), listener);
}
// Callback for when a client connects on the port
void ClientCallback(IAsyncResult result)
{
listener = (TcpListener)result.AsyncState;
try
{
client = listener.EndAcceptTcpClient(result);
// From here you can access the stream etc and read data
}
catch (IOException e)
{
// Handle any exceptions here
}
}
}
如果客户端连接正确,则可以自由访问客户端网络流,然后向客户端读写数据。这里有一个快速参考和示例供您查看:
在读写数据时,客户机的NetworkStream读写函数也会出现类似的锁定问题。对于此问题,您有两种可能的解决方案:
希望这能有所帮助设备作为客户端听起来很奇怪。是否确实不应使用
tcpClient.Connect()
连接端口123上的设备
为什么?
您确定您的设备正在发送数据吗?尝试使用Wireshark或其他网络分析工具查看网络上发生的情况。