我遇到了一个小问题。我想使用服务器套接字将玩家列表发送到客户端。但由于某种原因,当我尝试运行应用程序时,它会在到达 socket = serverSocket.accept();
时停止。我在谷歌上尝试了一些东西,但不起作用。
package Serverside;
import java.io.*;
import java.net.*;
import com.mygdx.game.Sprites.Hero;
import com.mygdx.game.Sprites.Player;
import java.util.ArrayList;
/**
*
* @author Tjidde Nieuwenhuizen
*/
public class ServerArenaOfLegends {
static ServerSocket serverSocket;
static Socket socket;
static ObjectOutputStream outStreamObj;
static ObjectInputStream inStreamObj;
static ArrayList<Player> playerList;
public static void main(String[] args) {
ServerArenaOfLegends sr = new ServerArenaOfLegends();
sr.run();
}
private void run() {
playerList = new ArrayList<Player>();
Player p1;
Hero hero = new Hero(2, null, 3);
p1 = new Player(null, null, hero);
playerList.add(p1);
try {
serverSocket = new ServerSocket(5555);
socket = serverSocket.accept();
outStreamObj = new ObjectOutputStream(socket.getOutputStream());
while (true) {
outStreamObj.writeObject(playerList);
}
} catch (Exception ex) {
System.out.println(ex.toString());
}
}
}
最佳答案
如果您运行此示例:
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(5555);
Socket socket = serverSocket.accept();
System.out.println("DONE");
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
程序将显示为挂起。
然后在命令行上运行“telnet 127.0.0.1 5555” 然后程序将打印“DONE”,然后结束。
所以.accept()阻塞直到它获取数据,这就是您所看到的行为。
关于Java服务器套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33998254/