2017-05-01 100 views
0

我在java中创建一个简单的客户端服务器程序。JAVA如何循环套接字变量

我想要做的是迭代变量,所以我可以缩短我的代码。这里是。

   Socket b1 = ss.accept(); 
      Socket b2 = ss.accept(); 
      Socket b3 = ss.accept(); 
     if(b1.isConnected()){ 
      System.out.println("Player from " + (b1.getLocalAddress().toString().substring(1) + ":" + b1.getLocalPort() + " has joined.")); 
     } 

     DataOutputStream b1o = new DataOutputStream(b1.getOutputStream()); 
     BufferedReader b1i = new BufferedReader(new InputStreamReader (b1.getInputStream())); 

     if(b2.isConnected()){ 
      System.out.println("Player from " + (b2.getLocalAddress().toString().substring(1) + ":" + b2.getLocalPort() + " has joined.")); 
     } 

     DataOutputStream b2o = new DataOutputStream(b2.getOutputStream()); 
     BufferedReader b2i = new BufferedReader(new InputStreamReader (b.getInputStream())); 

     if(b3.isConnected()){ 
     System.out.println("Player from " + (b3.getLocalAddress().toString().substring(1) + ":" + b3.getLocalPort() + " has joined.")); 
     } 

     DataOutputStream b3o = new DataOutputStream(b3.getOutputStream()); 
     BufferedReader b3i = new BufferedReader(new InputStreamReader (b3.getInputStream())); 

有没有什么办法循环变量名,所以它在第一个循环b1,然后是b2,依此类推。提前致谢。

+1

也许首先看看[All About Sockets](https://docs.oracle.com/javase/tutorial/networking/sockets/) - 你应该有一个“服务器”,它接受里面的连接连接一个循环,当一个新的连接建立时,你应该产生一个新的线程来处理与该套接字的通信 – MadProgrammer

+0

另外,如果你添加“示例”或“教程”的网页搜索,你通常可以得到很好的结果。例子我发现这个页面,它似乎有一些体面的例子:https://www.cs.uic.edu/~troy/spring05/cs450/sockets/socket.html – markspace

回答

0

在socketList

for(Socket socket : socketList){ 
    //Add your code here 
} 
0

创建一个ArrayList

ArrayList<Socket> socketList = new ArrayList(); 
socketList.add(ss.accept()); 
socketList.add(ss.accept()); 
socketList.add(ss.accept()); 

然后环路MadProgrammer说,最好是每一个连接上启动一个新的线程,为ss.accept()块。你可以尝试这样的事情:

Socket b; 
ServerSocket ss; 
ClientConnection newClient; 
Thread newThread; 

while(true) { 
    try { 
     b = ss.accept(); 

     System.out.println("Player from " + (b.getLocalAddress().toString().substring(1) + ":" + b.getLocalPort() + " has joined.")); 
     newClient = new ClientConnection(b); 

     newThread = new Thread(newClient); 
     newThread.start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

class ClientConnection implements Runnable { 

    //each connection should have its own socket and streams 
    private Socket socket; 
    private ObjectOutputStream outputStream; 
    private ObjectInputStream inputStream; 

    public ClientConnection(Socket socket) { 
     this.socket = socket; 
     this.outputStream = new ObjectOutputStream(socket.getOutputStream()); 
     this.inputStream = new ObjectInputStream(socket.getInputStream()); 
    } 

    @Override 
    public void run() { 
     //do stuff with connection you have 
    } 
} 

我也建议您保持连接的阵列,这样你就不会失去他们。

+0

解决它。感谢你们。 –