2013-03-14 91 views
0

我想在我调用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); 
     } 
    } 
+0

显示初始化_clientSocket – Gary 2013-03-14 02:51:31

+0

@Gary,我刚刚编辑的代码。有一个连接按钮可以初始化_clientSocket。 – Liban 2013-03-14 02:58:48

回答

2

那是你的问题,你在Form1构造函数访问_clientSocket它尚未初始化。

+0

享受你的新特权@ 3000代表。 – 2013-03-14 03:19:15

+1

即使我在Form1中初始化它,程序将等待无限期的时间,而套接字未连接。所以它阻塞了整个UI线程。 – Liban 2013-03-14 03:24:18

+0

@Liban那么也许你应该在后台线程上执行连接 – Gary 2013-03-14 03:27:38

相关问题