Я новичок здесь, поэтому, если этот пост ужасно отформатирован, прошу прощения.
Итак, у меня возникла проблема ...
Я делаю подобное приложение для обмена сообщениями на основе TcpDiscord, Teamspeak и т. д. Как вы можете видеть ниже, у меня есть функция, которая возвращает байт [], который извлекается из сетевого потока. У меня также есть оператор if / else, чтобы гарантировать, что функция не пытается извлечь данные из потока, который не подключен, поэтому у меня есть bool (подключено), которое определяет состояние подключения. Этот bool правильно обновлен, чтобы соответствовать статусу соединения. Сначала я подумал, что это может быть проблемой, но я обнаружил, что это не так.
private byte[] RecieveData(TcpClient server)
{
byte[] data = new byte[1024];
if (connected)
{
6th line -> server.GetStream().Read(data, 0, data.Length);
return data;
}
else
{
return null;
}
}
Изображение отладки (не могу добавить изображения по какой-то причине)
Мой вопрос: почему 6-я строка кода (server.GetStream (). Read (data, 0, data.Length);) выполняется, когда условие if ложно. Если вам нужно что-нибудь от меня (фото, код и т. Д.), Просто спросите! Любая помощь будет оценена. Спасибо!
Пример минимальной воспроизводимости
Клиент: В порядке выполнения
private void ServerDisconnect(TcpClient server, byte[] data) //Called from a button
{
connected = false;
Server = null;
Disconnect(server);
}
public void Disconnect(TcpClient server)// Checks for a connection, if there is, send DISCON request to server, if not dont
{
if (server.Connected) SendMessage(server, DISCON, currentUser);
connected = false;
server.Close();
}
private void SendMessage(TcpClient server, byte code, User user)// Uses AddMessageCode method to specify what type of request the message is.
{
NetworkStream stream = server.GetStream();
byte[] data = AddMessageCode(code, ObjectToByteArray(user));//Uses a simple Binary converter to serialize a class.
stream.Write(data, 0, data.Length);//Sends request to server
}
private byte[] AddMessageCode(byte code, byte[] data)// Adds the byte code to the start of the data array.
{
byte[] newData = new byte[data.Length + 1];
newData[0] = code;
Array.Copy(data, 0, newData, 1, data.Length);
return newData;
}
Теоретически, метод нижене должно вызывать ошибку. Но это так.
private byte[] RecieveData(TcpClient server)
{
byte[] data = new byte[1024];
if (server.Connected)
{
server.GetStream().Read(data, 0, data.Length);
return data;
}
else
{
return null;
}
}
Если это все еще недостаточно ясно. Прошу прощения.
Ссылка на исходный код