程序永远不会到达某一点

时间:2015-07-17 17:57:30

标签: java multithreading sockets multidimensional-array serversocket

更新 事实证明我同时在我的服务器和客户端上初始化我的输入流,这就是导致问题的原因。

在我正在制作的应用程序的服务器端:我从未到达代码的一部分,这导致我的客户端在此时阻塞。最初我假设没有足够的资源来运行程序,所以我退出了所有其他应用程序并再次尝试。我让它运行了一个小时,但仍无济于事。

我怎么能弄清楚出了什么问题?我无法理解它可能阻塞的地方,并且在此之前的任何地方都无法陷入无限循环。

 String[][] coordinates1 = new String[10][10], coordinates2 = new String[10][10];
 public void run() {
    //initializes the 10x10 grids for the player
    synchronized (this) {
        //outer loop is for the rows
        for (int loop = 0; loop < 10; loop++) {
            //the inner loop is for the columns
            for (int loop2 = 0; loop2 < 10; loop2++) {
                coordinates1[loop][loop2] = "~ ";
                coordinates2[loop][loop2] = "~ ";
            }
        }
    }
    if (player == 1) {
        //deals with the client assuming it is player1
        //declares Object i/o streams
        ObjectInputStream in = null;
        ObjectOutputStream out = null;
        try {
            //initializes i/o streams
            in = new ObjectInputStream(client.getInputStream());
            out = new ObjectOutputStream(client.getOutputStream());
            //writes the two 10x10 grids to the client
            out.writeObject(coordinates2);
            out.writeObject(coordinates1);
            out.flush();
            ...
            }

它永远不会到达的部分是“out.writeObject(..);”线。

可以找到完整的代码M2Eclipse FAQ以及客户端。

1 个答案:

答案 0 :(得分:1)

它没有被阻止,您的程序正在等待。

你永远不会到达writeObject行,因为前面的两行(getInputStream和getOutputStream)将等待&#34;等待&#34;为套接字建立有效的连接。您可以通过在此周围放置两条日志行来验证这一点:

in = new ObjectInputStream(client.getInputStream());

要解决此问题,我建议您查看建立连接的代码(ServerSockets和Sockets)。