0
如何在我的套接字上允许多个连接?Java套接字多个连接
在问你之前,我已经看过相关的主题,但我无法完成工作。我正在使用一个线程,但是我相信我错误地使用了它。这里是我的代码:
谢谢。
Server.java
package server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import entities.Player;
public class Server extends JFrame {
static ServerSocket serverSocket;
static Socket clientSocket;
static Socket socket;
public static int port = 43594;
static JPanel panel = new JPanel();
Player player = new Player();
public static JLabel players;
public static String s;
public void initialize() throws IOException {
serverSocket = new ServerSocket(port);
frame();
for (;;) {
Socket clientSocket = null;
clientSocket = serverSocket.accept();
new Thread(new ConnectionHandler(clientSocket)).start();
}
}
public void frame() {
JLabel status = new JLabel("Server is running on 43594");
s = String.valueOf(player.playerCount);
players = new JLabel(s);
panel.add(status);
panel.add(players);
add(panel);
setSize(400, 400);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
ConnectionHandler.java
package server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.SocketException;
import entities.Player;
public class ConnectionHandler implements Runnable {
private Socket clientSocket;
Player player = new Player();
public ConnectionHandler(Socket socket) {
player.playerCount++;
Server.s = String.valueOf(player.playerCount);
Server.players.setText(Server.s);
clientSocket = socket;
}
public void run() {
BufferedReader in;
try {
in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
String nextline;
try {
while ((nextline = in.readLine()) != null) {
System.out.println(nextline);
}
} catch (SocketException e) {
player.playerCount--;
Server.s = String.valueOf(player.playerCount);
Server.players.setText(Server.s);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端连接和断开工作得很好,我只是不能同时连接多台客户端一次。提前致谢。
为什么插座声明为static? 。你不需要。 – Mani
_“我弄清楚为什么它不能处理多个客户端,它与我创建的一些类对象和静态变量有关,它是固定的:) - ”_你可以发布你自己的答案并接受它,如果你想要的话,结束这个问题。 – DoubleDouble
你的服务器类中不应该有任何“静态套接字”成员。你有两个。删除它们。它们是发生或等待发生的并发错误。 – EJP