Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从tcp端口接收数据_C# - Fatal编程技术网

C# 从tcp端口接收数据

C# 从tcp端口接收数据,c#,C#,我对用于信号捕获的设备(vilistus)有一些问题,因为它的软件应该在捕获期间将数据发送到tcp端口(#123),我使用带有tcp侦听器的c代码从同一端口接收数据,但程序在accepttcpclient()命令行被阻止,没有接收到数据 TcpClient client = this.tcpListener.AcceptTcpClient(); 听起来好像客户端没有连接到侦听器。当您在TcpListener上调用AcceptTcpClient时,应用程序将挂在那里等待客户端连接,这似乎是您遇到

我对用于信号捕获的设备(vilistus)有一些问题,因为它的软件应该在捕获期间将数据发送到tcp端口(#123),我使用带有tcp侦听器的c代码从同一端口接收数据,但程序在
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读写函数也会出现类似的锁定问题。对于此问题,您有两种可能的解决方案:

  • 通过设置NetworkStream的ReadTimeout和WriteTimeout属性,为读写函数设置超时

  • 通过使用NetworkStream中的BeginRead和BeginWrite函数,使用与BeginAcceptTcpClient类似的回调方法

  • 就个人而言,我更喜欢第二个选项,因为第一个选项在超时发生之前不会释放程序,但它们都是可行的选项,这取决于您更喜欢实现哪一个。有关NetworkStream的更多信息,请访问此处:


    希望这能有所帮助

    设备作为客户端听起来很奇怪。是否确实不应使用
    tcpClient.Connect()
    连接端口123上的设备

    为什么?

  • 设备如何知道服务器正在运行?它无法尝试永远连接
  • 设备如何知道端口123对您在PC中的应用程序是免费的

  • 您确定您的设备正在发送数据吗?尝试使用Wireshark或其他网络分析工具查看网络上发生的情况。