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