简体   繁体   English

Java服务器套接字

[英]Java Serversocket

I got a minor issue. 我有一个小问题。 I want to use serversockets to send over a list of players to a client. 我想使用服务器套接字将播放器列表发送到客户端。 But for some reason when I try to run the application it will stop at when it reaches socket = serverSocket.accept(); 但是由于某种原因,当我尝试运行该应用程序时,它将在到达socket = serverSocket.accept();时停止socket = serverSocket.accept(); . I tried serval things on google but doesn't work. 我在Google上尝试过伺服服务,但没有用。

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());
        }
    }
}

If you run this example : 如果运行此示例:

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());
        }
    }

The program will appear to hang. 该程序将挂起。

Then on the command line run "telnet 127.0.0.1 5555" The program will then print "DONE" and then end. 然后在命令行上运行“ telnet 127.0.0.1 5555”,然后程序将打印“ DONE”,然后结束。

So .accept() blocks until it gets data and this is the behavior you are seeing. 因此, .accept()会阻塞直到它获取数据,这就是您所看到的行为。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM