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

“我想通了,为什么它不能处理多个客户端它涉及到我做了一些类对象,和静态变量它固定尽管:) - 。”