2017-08-08 14 views
-1

私はJavaソケットプログラミングに従おうとしています。 私の目標は、複数のクライアントスレッドを作成し、それらのスレッドは状態 をポストし、それらはすべて同じサーバーによってリスンされます。この 1.サーバーの開始 2.クライアントAのようなJavaソケットプログラミングで単一のサーバーで複数のクライアントを作成する方法

何かが 3.クライアントBが 4.クライアントAが 5.クライアントBは、クライアント 6に "こんにちは" と述べクライアントBに "こんにちは" と述べ始めた開始しましたクライアントAがHi2をクライアントBに接続 7.クライアントBがクライアントAに "Hi2"を言った 8.クライアントAがクライアントBに "Hi3"を言った 9.クライアントBがクライアントAに "Hi3"を言った10.クライアントA完了 11.クライアントBが完了しました

これまでに試したことは次のとおりです。 1. MyServe r.java

import java.net.*; 
import java.io.*; 

class MyServer 
{ 
    public static void main(String args[]) throws Exception 
    { 
     ServerSocket server_socket = new ServerSocket(3333); 
     Socket client_socket = server_socket.accept(); 
     DataInputStream din = new DataInputStream(client_socket.getInputStream()); 
     DataOutputStream dout = new DataOutputStream(client_socket.getOutputStream()); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

     String str = "", str2 = ""; 
     int counter = 0; 
     while (!str.equals("stop") && counter < 10) 
     { 
      str = din.readUTF(); 
      System.out.println("client says: " + str); 
      //str2 = br.readLine(); 
      str2 = str +"server response "; 
      dout.writeUTF(str2); 
      dout.flush(); 
      counter ++; 
     } 

     din.close(); 
     client_socket.close(); 
     server_socket.close(); 
    } 
} 
  • MyClient.java
  • インポートjava.util.stream.IntStream

      public class ClientThreadはRunnableを実装します { String client_name;

      public ClientThread(String client_name) 
      { 
          this.setClient_name(client_name); 
      } 
      
      public void run() 
      { 
          for(int i=0;i<5;i++) 
          { 
           System.out.println(this.getClient_name()+" : "+i); 
           new ClientHelper().sendMessageToServer(this.getClient_name(),i); 
           try 
           { 
            Thread.sleep(1000); 
           } catch (InterruptedException e) 
           { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
           } 
          } 
      } 
      
      public String getClient_name() 
      { 
          return client_name; 
      } 
      
      private void setClient_name(String client_name) 
      { 
          this.client_name = client_name; 
      } 
      

      }

      3。 ClientHelper.java

      import java.io.BufferedReader; 
      import java.io.DataInputStream; 
      import java.io.DataOutputStream; 
      import java.io.IOException; 
      import java.io.InputStreamReader; 
      import java.net.Socket; 
      import java.net.UnknownHostException; 
      
      public class ClientHelper 
      { 
          Socket socket; 
          DataInputStream din ; 
          DataOutputStream dout ; 
      
          public void sendMessageToServer(String player_name, int i) 
          { 
           try 
           { 
            socket = new Socket("localhost", 3333); 
            din = new DataInputStream(this.getSocket().getInputStream()); 
            dout = new DataOutputStream(this.getSocket().getOutputStream()); 
            // BufferedReader br = new BufferedReader(new 
            // InputStreamReader(System.in)); 
            dout.writeUTF(player_name + " : says hi :" + i); 
            dout.flush(); 
            socket.close(); 
           } catch (UnknownHostException e) 
           { 
            e.printStackTrace(); 
           } catch (IOException e) 
           { 
            e.printStackTrace(); 
           } finally 
           { 
           } 
      
          } 
      
          private Socket getSocket() 
          { 
           return socket; 
          } 
      
          private void setSocket(Socket socket) 
          { 
           this.socket = socket; 
          } 
      } 
      
    1. App.java

      パブリッククラスアプリ {

      public static void main(String[] args) 
      { 
          new Thread(new ClientThread("A")).start(); 
          //new Thread(new ClientThread("B")).start(); 
          /*try 
          { 
      
           DataInputStream dataInputStream; 
           DataOutputStream dataOutputStream; 
           BufferedReader bufferedReader; 
           Socket socket = new Socket("localhost", 12345); 
           dataInputStream = new DataInputStream(socket.getInputStream()); 
           dataOutputStream = new DataOutputStream(socket.getOutputStream()); 
           bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 
      
           Player p1 = new Player("p1", dataInputStream, dataOutputStream, bufferedReader); 
           Player p2 = new Player("p2", dataInputStream, dataOutputStream, bufferedReader); 
           p1.move(); 
           p2.move(); 
          } catch (UnknownHostException e) 
          { 
           e.printStackTrace(); 
          } catch (IOException e) 
          { 
           e.printStackTrace(); 
          }*/ 
      
      } 
      

      }

    これは、1つを接続しますクライアントは接続しませんが、2番目のクライアントは接続しません。

    +0

    親愛downvoterなどの各クライアント何かのために、少なくとも提案理由downvotingをドロップします。 – user1379280

    答えて

    1

    あなたのMyServerは間違っています。それはただ1つのクライアントを受け入れます。

    try (ServerSocket s = new ServerSocket(...);) { 
         while (true) { 
          Socket conn = s.accept(); 
          conn.getInetAddress().getHostName() + " : " + conn.getPort()); 
          new ServerConnection(conn).start(); 
         } 
        } 
        catch(IOException e) { 
         e.printStackTrace(); 
        } 
    
    } 
    

    この

    public class ServerConnection extends Thread { 
    
        private Socket client_socket; 
    
        public ServerConnection(Socket client_socket) { 
         this.client_socket = client_socket; 
        } 
    
        public void run() { 
         DataInputStream din = new DataInputStream(client_socket.getInputStream()); 
         DataOutputStream dout = new DataOutputStream(client_socket.getOutputStream()); 
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    
         String str = "", str2 = ""; 
         int counter = 0; 
         while (!str.equals("stop") && counter < 10) 
         { 
          str = din.readUTF(); 
          System.out.println("client says: " + str); 
          //str2 = br.readLine(); 
          str2 = str +"server response "; 
          dout.writeUTF(str2); 
          dout.flush(); 
          counter ++; 
         } 
    
         din.close(); 
        } 
    } 
    
    関連する問題