Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多次连接到插座_Java_Sockets_Serversocket_Reconnect - Fatal编程技术网

Java 多次连接到插座

Java 多次连接到插座,java,sockets,serversocket,reconnect,Java,Sockets,Serversocket,Reconnect,好的,当我第一次连接时,一切正常。但当我再次连接时(不停止服务器程序),它会显示“连接被拒绝:连接”。我认为这是因为我只接受了一次连接,所以我使用了一个swing计时器,每10毫秒触发一次操作事件,每次操作事件触发时,它都会将clientSocket设置为serverSocket.accept()(clientSocket=serverSocket.accept();)因此代码如下: package org.code; import java.net.*; import java.io.*;

好的,当我第一次连接时,一切正常。但当我再次连接时(不停止服务器程序),它会显示“连接被拒绝:连接”。我认为这是因为我只接受了一次连接,所以我使用了一个swing计时器,每10毫秒触发一次操作事件,每次操作事件触发时,它都会将clientSocket设置为serverSocket.accept()(clientSocket=serverSocket.accept();)因此代码如下:

package org.code;

import java.net.*;
import java.io.*;

public class MainClass {
    public static void main(String[] args) {
            new MainClass();
    }


    Socket server = null;
    PrintWriter out = null;

    public MainClass() {
            try {
                    server = new Socket("192.168.0.104", 4444);
                    out = new PrintWriter(server.getOutputStream(), true);

                    out.println("start");

                    out.close();
                    server.close();
            } catch(Exception ex) {ex.printStackTrace();}
    }
}
以及:


是的,当前实现的问题是它只等待第一个客户端,然后服务器停止。选中最后一项“支持多个客户端”。通常,支持多个客户端的模式如下:

while (true) {
    accept a connection;
    create a thread to deal with the client;
}
您的服务器程序(顺便说一句,它与客户端程序具有完全相同的类名,这不是很明智),只接受一个连接

一旦它完成了与第一个客户机的对话,它就结束了。您认为它仍在侦听,因为帧仍然可见,但主方法已结束


如果要接受多个连续连接,则应该有一个循环。如果需要多个并行连接,则应该生成线程

每次请求后,代码都会关闭服务器套接字(并停止)

这更有可能奏效。(我没有测试它,但通过它,您可以得到场景)


问题就在这里。现在关闭服务器套接字没有任何意义,因为您已经完成了一个客户端。

这里的问题到底是什么?谢谢!这是一个懒惰的错误lol。我将经历另一个程序的麻烦,该程序将检查服务器是否打开,如果没有,打开它。
while (true) {
    accept a connection;
    create a thread to deal with the client;
}
// in your main 
serverSocket = new ServerSocket(4444);

try {
    while (true) { 
        clientSocket = serverSocket.accept();

        Thread t = new ClientSocketThread(clientSocket);
        t.start();
    }
} finally {
    serverSocket.close();
}


class ClientSocketThread extends Thread {
    final Socket clientSocket;

    ClientSocketThread(Socket clientSocket) {
        this.clientSocket = clientSocket;
    }

    public void run() {
        InputStream in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        try
            String inputLine;

            while((inputLine = in.readLine()) != null) {
                System.out.println(inputLine);
                if(inputLine.equals("start")) {
                     System.out.println("Good");
                }
                if(inputLine.equals("stop")) {
                     System.out.println("Bad");
                }
            }
         } finally {
            in.close()
            clientSocket.close();
         }
    }
}
clientSocket.close();
serverSocket.close();