2013-12-23 5 views
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(); 
    } 
} 

} 

클라이언트 연결 및 연결 해제는 잘 작동, 난 그냥 한 번에 두 개 이상의 클라이언트를 연결할 수 없습니다. 미리 감사드립니다.

+0

왜 소켓이 정적으로 선언? . 너는 필요 없다. – Mani

+1

_ "여러 클라이언트를 처리 할 수없는 이유를 알아 냈습니다. 내가 만든 클래스 개체 및 정적 변수와 관련이 있습니다. 고정되어 있습니다 :) -"_ 사용자 자신의 답변을 게시하고 원하는 경우 수락 할 수 있습니다. 질문을 끝내라. – DoubleDouble

+2

서버 클래스에 '정적 소켓'멤버가 없어야합니다. 너는 두 명이야. 그들을 제거하십시오. 그들은 일어나거나 기다리고있는 동시성 버그입니다. – EJP

답변

-1

"는 여러 클라이언트를 처리 할 수없는 이유를 알아 냈 그것은 몇 가지 클래스 내가 만든 객체, 정적 변수에 관한 한 그것은 :)하지만 고정 있어요 -.."