簡體   English   中英

有沒有一種方法可以同步檢查套接字可用數據?

[英]Is there a way to check socket available data, synchronously?

我想在調用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);
        }
    }

那是您的問題,您正在Form1構造函數中訪問_clientSocket,並且尚未初始化。

查看文檔: Socket.Poll()如果像您一樣將微秒數設置為負數,它將永遠等待任何類型的響應。

根據測試使用等待時間,因此不要

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM