大家好!我看了网上的坦克大战,使用的是当坦克移动位置时发送消息到服务端转发。
现在我的实现是:当监听到键盘下按相应的按键时发送消息到服务器,如果按下某个键不放则只发送一次。问题:
如果用户不停止的按下、抬起方向键,次数一多则接收端口会发生异常。如果收不到消息或消息丢失。如果:当键盘夺下时起个线程向当前的SOCKET中发送按键的消息,抬起键盘时在发送一次。如果我不停止的压下、抬起、最后会发现抬起的按钮事件消息或其它消息没有正常的发送到客户端。
以上发送消息采用的是自已构造成XML、直接字节流发送outputstream和inputstream

解决方案 »

  1.   

    当你主战Tank改变方向才发,而不是按下就发,给联网发送你改变方向的消息就可以了,Tank的移动根据方向而定,定时做同步
      

  2.   


    谢谢你的答复,我也实现过改变方法再发消息,只是遇到这个问题,我想搞清楚而已,不知道如何解决。难道是因为我采用了XML来发送消息造成客户端或服务器构造时时间太长引起的?(当时为了复习刚刚学习的XML才这样做的)
      

  3.   

    //不需要限制按下键盘的速率。你可能重写,
    public void mousePressed(MouseEvent e) {}
    //导致不断地向外发送数据
    //你可以重写
    public void mouseReleased(MouseEvent e) {}
    //也就是只有抬起按键的瞬间才发送信息//如果你非要限制键盘的速率,首先建立出一个Time()对象和一个全局标志,只有标志满足某种状态之后,才//允许发信息
      

  4.   

    mouseReleased(MouseEvent e)代替mousePressed(MouseEvent e),要精确的限制速率的话TIME