套接字工作太慢 :: java/libgdx.



我正在使用java/libgdx,遇到了套接字问题。它工作得很慢。我的小游戏呈现了左右移动的角色。通过 tcp/localhost 发送后,它的移动速度会变慢。我从客户端和服务器类中添加了两条代码。请帮助我。我愣住了。提前谢谢。如果有必要,我会放整个代码。

//客户

    public class ClientThread extends Thread{
    public void run(){
        hints = new SocketHints();
        hints.connectTimeout = 11000;
        while(trwanie)
        {
            socket = Gdx.net.newClientSocket(Protocol.TCP, "localhost", 8784, hints );
                if(!socket.isConnected() )
                    System.out.println("NIE JEST");
                //System.out.println("socket null?");
            if(socket!=null)
            {
                try {
                    socket.getOutputStream().write(new String("CZESC server").getBytes()); // wiadomosc wysylana
                    //byte[] read = new byte[1024];
                    socket.getInputStream().read(read); //odebrana od servera
                    readString = new String(read).trim();
                    XY = readString;
                    StringToFloat();
                } catch (IOException e) {
                    e.printStackTrace();socket.dispose();
                }
            }
            //socket.dispose(); 
            if(Gdx.input.isKeyPressed(Keys.ESCAPE))
            {
                 WylaczPentle();
                 System.out.println("Wychodzimy z pentli");
                 Gdx.app.exit();
            }
        }
        socket.dispose();       
    }
}

//服务器

    public class ServerThread extends Thread{
    public void run()
    {
        hints = new ServerSocketHints();
        hints.acceptTimeout = 12000;
        socketHints = new SocketHints();
        while(trwanie)
        {
            server = Gdx.net.newServerSocket(Protocol.TCP, "localhost", 8784, hints);   
            socket  = server.accept(socketHints);
            if(socket != null)
            {
                //byte[] read = new byte[1024];
                try {
                    socket.getInputStream().read(read);
                    socket.getOutputStream().write( (WspolzednaX+"/"+WspolzednaY).getBytes());                                                                          //---
                } catch (IOException e) {
                    e.printStackTrace();
                    server.dispose();
                }
            }
            server.dispose();
            if(Gdx.input.isKeyPressed(Keys.ESCAPE))
            {
                 WylaczPentle();
                 System.out.println("Wychodzimy z pentli");
                 Gdx.app.exit();
            }
        }
        server.dispose();   
    }   
}

代码运行缓慢的一个原因是您的客户端似乎反复打开/使用/关闭同一服务器的套接字。 考虑到打开和关闭需要大量时间(执行网络数据包交换(,您最好打开一次套接字,并在客户端和服务器交换多个"消息"时保持打开状态。

您的代码还有其他问题。 例如,read(bytes[]) 方法返回一个int,说明实际读取了多少字节。 客户端和服务器端代码忽略了这一点,并假设缓冲区中的所有read.length字节都包含有效数据。

已解决:)问题出在会议客户端和服务器上。我在 while(( 之前添加了线程 0,5s,现在它运行良好:((

谢谢大家。

最新更新