我想在调用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 :(得分:2)
这是你的问题,你正在访问Form1构造函数中的_clientSocket,它还没有初始化。
答案 1 :(得分:2)
查看文档:{{3}} 如果你像你一样将微秒数设置为负数,它将永远等待任何类型的响应。
根据您的测试使用等待时间,因此不是