关于java socket编程和局域网游戏的延迟
最近在学校学习了java的socket编程。我尝试用socket编写一个局域网的小游戏,是服务器端和客户端各控制一个小人即时地战斗。每隔10ms服务器端和客户端的线程会进...
最近在学校学习了java的socket编程。我尝试用socket编写一个局域网的小游戏,是服务器端和客户端各控制一个小人即时地战斗。
每隔10ms服务器端和客户端的线程会进行一次数据的收发。客户端发送给服务器端的数据,包括自己的小人移动和攻击的命令,服务器端把整个游戏显示画面的数据发给客户端。之后服务器端进行双方命令的处理,然后刷新画面。
我在自己的电脑上同时打开两个程序,一个作为服务器端,一个作为客户端。这时候运行游戏就很流畅。可是当我在宿舍的局域网中和同学尝试联机,游戏变得非常卡。大概每隔半秒左右游戏画面才进行了一次刷新。
我估计是局域网的延迟的影响,数据的交流没有按我设计的每隔10ms进行一次。于是我修改了数据收发的时间间隔,但是好像没有作用。哪怕是改成0,数据的交流也只能在半秒左右进行一次。可是我ping同学的ip,平均延迟最多也只有几十毫秒呀。
最后我试图把处理游戏画面和局域网数据传递的部门分开,于是在服务器端和客户端的画面显示是流畅了,
但是服务器端不能即时获得客户端发送的信息,总是有半秒的间隔,这导致我在服务器端观看客户端的小人的行为是跳跃式的,仍然达不到流畅的效果。
平时看到的局域网游戏和网络游戏,玩家之间的动作是非常流畅的。按理说局域网之间的延迟非常小,我程序的问题在哪里呢? 展开
每隔10ms服务器端和客户端的线程会进行一次数据的收发。客户端发送给服务器端的数据,包括自己的小人移动和攻击的命令,服务器端把整个游戏显示画面的数据发给客户端。之后服务器端进行双方命令的处理,然后刷新画面。
我在自己的电脑上同时打开两个程序,一个作为服务器端,一个作为客户端。这时候运行游戏就很流畅。可是当我在宿舍的局域网中和同学尝试联机,游戏变得非常卡。大概每隔半秒左右游戏画面才进行了一次刷新。
我估计是局域网的延迟的影响,数据的交流没有按我设计的每隔10ms进行一次。于是我修改了数据收发的时间间隔,但是好像没有作用。哪怕是改成0,数据的交流也只能在半秒左右进行一次。可是我ping同学的ip,平均延迟最多也只有几十毫秒呀。
最后我试图把处理游戏画面和局域网数据传递的部门分开,于是在服务器端和客户端的画面显示是流畅了,
但是服务器端不能即时获得客户端发送的信息,总是有半秒的间隔,这导致我在服务器端观看客户端的小人的行为是跳跃式的,仍然达不到流畅的效果。
平时看到的局域网游戏和网络游戏,玩家之间的动作是非常流畅的。按理说局域网之间的延迟非常小,我程序的问题在哪里呢? 展开
3个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询