2013-12-23 117 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

爲什麼插座聲明爲static? 。你不需要。 – Mani

+1

_「我弄清楚爲什麼它不能處理多個客戶端,它與我創建的一些類對象和靜態變量有關,它是固定的:) - 」_你可以發佈你自己的答案並接受它,如果你想要的話,結束這個問題。 – DoubleDouble

+2

你的服務器類中不應該有任何「靜態套接字」成員。你有兩個。刪除它們。它們是發生或等待發生的併發錯誤。 – EJP

回答

-1

「我想通了,爲什麼它不能處理多個客戶端它涉及到我做了一些類對象,和靜態變量它固定儘管:) - 。」