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();
}
}
}
클라이언트 연결 및 연결 해제는 잘 작동, 난 그냥 한 번에 두 개 이상의 클라이언트를 연결할 수 없습니다. 미리 감사드립니다.
왜 소켓이 정적으로 선언? . 너는 필요 없다. – Mani
_ "여러 클라이언트를 처리 할 수없는 이유를 알아 냈습니다. 내가 만든 클래스 개체 및 정적 변수와 관련이 있습니다. 고정되어 있습니다 :) -"_ 사용자 자신의 답변을 게시하고 원하는 경우 수락 할 수 있습니다. 질문을 끝내라. – DoubleDouble
서버 클래스에 '정적 소켓'멤버가 없어야합니다. 너는 두 명이야. 그들을 제거하십시오. 그들은 일어나거나 기다리고있는 동시성 버그입니다. – EJP