2017-05-10 8 views
2

2台のコンピュータ間で通信するには2つのJavaアプリケーションが必要です。 1つはフロントエンドで情報を表示し、ユーザー入力を受け取り、もう1つはセッションの最後にそれを格納するサーバーです。サーバーには、ユーザーをシステムに追加/削除するためのインターフェイスもあります。Java:他のプロセスを実行中にソケットからリスンする

私は自分自身で動作するように、各アプリケーションを得ている、と私も自分自身で動作するように設定通信を得ています。

今、私は私が解決するように見えることはできません問題に実行したモジュールを組み合わせることを持っていること。

コミュニケーションの「サーバー」の部分は、パッケージを待っている間(真)ループ内で実行されています。これにより、他のアプリケーションに統合するのが難しくなります。

私は「ただ」という操作を行うのだが、複雑さは私に私はここに誰かが私が軌道に乗る助けることができる期待していたので、現時点では困惑ビットを持って考えて、スレッドについて読んでてきました。

ここに、Serverクラスのコードを示します。

private String[] str = new String[4]; 
private String sentence; 
private InetAddress IPAddress; 
private int port; 

private byte[] receiveData = new byte[1024]; 
private byte[] sendData = new byte[1024]; 

private DatagramSocket serverSocket; 

private void listen(int serverPort) { 
    try { 
     this.serverSocket = new DatagramSocket(serverPort); 

     while (true) { 
      receivePackage(); 
      splitPackage(this.sentence); 
      sendConfirm(); 
     } 

    } catch (SocketException ex) { 
     System.out.println("UDP Port" + serverPort + "is unavailable."); 
     System.exit(1); 
    } 
} 

private void sendConfirm() { 
    this.sendData= "RECEIVED".getBytes(); 
    DatagramPacket sendPacket = new DatagramPacket(this.sendData, this.sendData.length, this.IPAddress, this.port); 
    try { 
     this.serverSocket.send(sendPacket); 
    } 
    catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

private void receivePackage() { 
    this.receiveData = new byte[1024]; 

    DatagramPacket receivePacket = new DatagramPacket(this.receiveData, this.receiveData.length); 

    System.out.println("Waiting for packet..."); 
    try { 
     this.serverSocket.receive(receivePacket); 

     this.sentence = new String(receivePacket.getData()); 

     this.IPAddress = receivePacket.getAddress(); 
     this.port = receivePacket.getPort(); 
    } 
    catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

private void splitPackage(String sentence) { 
    this.str = sentence.split("\\+"); 
    for (String s: this.str) { 
     System.out.println(s); 
    } 
} 

答えて

0

あなたのサーバークラスはRunnableを実装作ってみましょう、と(Runnableをオーバーライドから)run()メソッドでは、あなたのループを置きます。

一度行って、あなたのサーバーを作成する必要がありジュスト、とでそれを始めましょう:そうすることによってnew Thread(yourServerName).start();

、「バックグラウンドで」実行し、実行できるように、通信に入るに耳を傾けるだろうサーバー他のプロセスを同時に実行することができます。

+0

これは機能します。驚くばかり!理由を見つけるために今..ありがとう:D – SproedAsfalt

関連する問題