2013-06-30 1 views
2

Я хочу написать мульти игры игрока в XNA 4. Для отправки данных я использую TcpClient класс, связанный, как это:C# TcpClient закрывает окно XNA игры после отправки данных

try{ 
    client.Connect(serverEndPoint); 
} 
catch (Exception ex){ 
    Console.WriteLine("not connected"); 
    return; 
} 

if (!client.Connected) return; 

NetworkStream stream = client.GetStream(); 

stream.BeginRead(buf, 0, 1024, new AsyncCallback(PrijmiData), null); 

, когда я хочу, чтобы отправить данные с его методы:

private void Send(byte[] co){ 
    NetworkStream clientStream = client.GetStream(); 
    clientStream.BeginWrite(co, 0, co.Length, new AsyncCallback(Sended), null); 
} 

private void Sended(IAsyncResult res){ 
    NetworkStream clientStream = client.GetStream(); 
    clientStream.EndWrite(res); 
} 

Сервер получает данные, но игра XNA сразу же прекращается. Зачем? Спасибо за совет.

+0

Ваш вопрос слишком расплывчатый. Вы спрашиваете о своей игре XNA, но вы не предоставляете никакого кода, связанного с самой игрой. Мое лучшее предположение - где-то есть необработанное исключение, когда вы получаете/отправляете запрос. –

+0

@Nik исключение не выбрасывается, Visual studio должен быть в состоянии обнаружить это, или я ошибаюсь? –

+0

Это зависит от ваших настроек –

ответ

0

Иногда, когда вы имеете дело с асинхронными вещами, подобными этому, приложения не выбрасывают правильные исключения, даже если они происходят.

Вы пробовали переходить через код, чтобы увидеть, когда он действительно закрывается?

Моя ставка будет в методе Sended. Попробуйте изменить его так, чтобы увидеть какие-либо исключения (написано «Отправлено», кстати):

private void Sended(IAsyncResult res) 
{ 
    try 
    { 
     NetworkStream clientStream = client.GetStream(); 
     clientStream.EndWrite(res); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
    } 
}