我正在使用java/libgdx,我遇到了套接字的问题。效果很慢。我的小游戏呈现人物形象,它左右移动。通过tcp/localhost发送后,它移动得更慢。我从Client和Server类中添加了两段代码。请帮帮我。我乱丢了。提前谢谢。如果有必要,我会把整个代码。
//客户
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();
}
}发布于 2016-05-15 14:42:02
您的代码速度慢的原因之一是您的客户端似乎在重复打开/使用/关闭同一个服务器的套接字。考虑到打开和关闭需要大量时间(执行网络数据包交换),您最好打开一次套接字,并在客户端和服务器交换多条“消息”时保持它的打开状态。
您的代码还有其他问题。例如,read(bytes[])方法返回一个int,该int表示实际读取了多少字节。客户端和服务器端代码忽略了这一点,并假设缓冲区中的所有read.length字节都包含有效数据。
发布于 2016-05-15 20:44:24
解决了:)问题是如何满足客户端和服务器。我在while()之前添加了线程0,5s,现在它运行良好:)
谢谢大家。
https://stackoverflow.com/questions/37239424
复制相似问题