这可能有点长篇帖子
我有一个服务器和一个客户端,我有能力看到发送/记录消息并在两台机器上实时计数,所以我不必在VS2012中进行调试,
我在加利福尼亚州的另一台计算机上运行我的服务器,以便服务器和客户端使用完全不同的IP并通过互联网进行实时测试,他们正在使用DNS名称并解决它们。< / p>
两台物理PC都没有防病毒功能,也没有防火墙,两者都没有防火墙。
两台机器都安装了wireshark,用于在UDP端口29999上跟踪我的数据包
序列如何工作是客户端发送登录,服务器通过某些凭据验证客户端,服务器发送播放器信息(统计信息)
第一次启动服务器可执行文件时,消息会毫无失败地传递到客户端。每次
如果您重新启动客户端并再次尝试,则客户端不会收到消息。
1)server.exe上的计数器正常递增, 2)服务器上的服务器Wireshark显示发送的消息 3)客户端的Wireshark看到UDP数据包从适当的IP地址进入正确的端口
但client.exe消息计数器不会递增。
如果我在VS2012中以DEBUG模式运行客户端并设置断点,如下所示:
while ((_NetworkIncomingMsg = _NetworkClient.ReadMessage()) != null)
{
ReadInTime = DateTime.Now; // <<-- break point here
// blah blah more code
}
它从未命中,没有收到任何消息。
重要的是要注意,如果我只是在while语句上的断点,是的它是触发,但是没有读取消息,因此它是null,因此跳过代码
我认为它与ReadServerMessages()方法的时间或位置有关。
我将ReadServerMessages()方法作为一个事件在Timer上触发,如下所示。计时器构造为每1.0毫秒启动一次。因为这在软件的每个其他部分都非常完美,包括在临时连接到专用服务器并不断发送数据包时。
public System.Timers.Timer ClientNetworkTick = new System.Timers.Timer(1.0);
void update_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// Check if server sent new messages
try
{
ReadServerMessages();
}
catch (Exception ex)
{
}
}
有什么想法?我遗漏的任何事情让我知道谢谢!