【问题标题】:C# TcpClient closes XNA game window after sending dataC# TcpClient 发送数据后关闭 XNA 游戏窗口
【发布时间】:2013-06-28 00:04:53
【问题描述】:

我想在 XNA 4 中编写多人游戏。为了发送数据,我使用 TcpClient 类连接,如下所示:

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 游戏立即结束。为什么?谢谢你的建议。

【问题讨论】:

  • 你的问题太模糊了。您询问您的 XNA 游戏,但您没有提供与游戏本身相关的代码。我最好的猜测是 - 当您接收/发送请求时,某处会抛出未处理的异常。
  • @Nik 没有抛出异常,Visual Studio 应该能检测到,还是我错了?
  • 这取决于你的设置
  • @Nik 我有正常未编辑的设置我认为编辑:我用 try-catch 包围了两种发送方法,没有抛出异常
  • @Vodáček 可能是因为连接正在关闭和处理。如果您想创建一个真正的多人游戏,定期发送和接收信息,您需要始终保持该连接打开。

标签: c# tcp xna tcpclient networkstream


【解决方案1】:

有时,当您处理这样的异步事情时,即使发生了异常,应用程序也不会抛出正确的异常。

您是否尝试过单步执行代码以查看它何时真正关闭?

我的赌注是 Sended 方法。尝试像这样更改它,以查看任何异常(它拼写为“Sent”,顺便说一句):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2011-08-03
    相关资源
    最近更新 更多