是否有同步检查套接字可用数据的方法

本文关键字:数据 方法 套接字 同步 检查 是否 | 更新日期: 2023-09-27 18:04:01

在调用receive()方法之前,我想检查套接字可用的数据。但这并没有奏效。我认为我检查套接字可用数据的方式不正确。这是代码:

 private Socket _clientSocket;               //Client socket
  public Form1()
    {
        InitializeComponent();
        //Check for data available before calling Receive().
        if (_clientSocket.Poll(-1, SelectMode.SelectRead))
        {
            Receive();
        }

    }

它给了我这个错误:Object reference not set to an instance of an object

检查套接字可用数据的正确方法是什么?我一直在想一些事情,但是我不知道是怎么回事。

帮忙吗?

编辑:连接按钮:

   private void BtnConnect_Click(object sender, EventArgs e)
    {
        try
        {
            string ip = TboxIP.Text;
            int port = int.Parse(TboxPort.Text);
            _clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // Connect to the  host
            _clientSocket.Connect(IPAddress.Parse(ip), port);
            if (SocketConnected(_clientSocket) == true)
            {
                lblStatus.Text = "Socket Connection Established .. ";
            }

        }
        catch (SocketException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

是否有同步检查套接字可用数据的方法

这是你的问题,你正在访问_clientSocket在Form1构造函数,它还没有被初始化。

查看文档:Socket.Poll()如果将微秒数设置为负数,它将永远等待任何类型的响应。

根据您的测试使用等待时间,因此不需要