2011-12-17 47 views
1

私はJavaでサーバ/クライアントアプリケーションを作っていますが、実際にはそれが望むように動作しません。サーバが応答しない

私は接続してすべてうまくいくが、それでも何もしない。私はそれがクライアントを受け入れるために私のスレッドに来ていないと思っています。

ここに私のコードです。

スレッドネットワーキング:

package libgdx.server; 


import java.io.IOException; 
import java.io.PrintWriter; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 

import java.net.*; 


public class NetworkingThread extends Thread { 
private Socket sock= null; 
private int ID; 

public NetworkingThread(Socket sock){ 
    super("Multiple connection thread!"); 

    this.sock = sock; 

} 

@Override 
public void run() { 
    try{ 
    System.out.println("In the Method run() in the thread!"); 

     PrintWriter out = new PrintWriter(sock.getOutputStream(),true); 

    BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream())); 
    String inputLine,outputLine; 
    AlphaProtocol alpha = new AlphaProtocol(); 
    outputLine = alpha.ProcessInput(null); 
    out.println(outputLine); 

    out.println("Welcome to the Server! Hope you enjoy your stay."); 
    while ((inputLine = in.readLine()) != null){ 
     outputLine = alpha.ProcessInput(inputLine); 
     out.println(outputLine); 
     if (outputLine.equals("Bye!")){ 
      break; 
     } 
    } 
    out.close(); 
    in.close(); 
    sock.close(); 
    }catch(IOException ioe){ 
     ioe.printStackTrace(); 
     System.err.println("Error in the Tread of Connecting and Method Run()"); 
    } 

} 

} 

これは、クライアントを受け入れ、それらを処理するためのサーバー上のトレッドです:)サーバー上の

メインクラス:

package libgdx.server; 

import java.io.IOException; 
import java.net.ServerSocket; 

/** 
* 
* @author Saturn 
*/ 
public class MainServer { 
private static ServerSocket Server = null; 
private static boolean networking = true; 


public static void main(String[] args) throws IOException{ 
    try{ 
     System.out.println("Server listening!"); 
     Server = new ServerSocket(4444); 


    }catch (IOException io){ 
    System.err.println("Error while making ServerSocket!"); 
    System.exit(-1); 
    } 
    while (networking) 
    System.out.println("Networking!"); 

     new NetworkingThread(Server.accept()).start();  

} 

}

サーバーのプロトコル:

/* 
* To change this template, choose Tools | Templates 
    * and open the template in the editor. 
*/ 
package libgdx.server; 

import java.util.Calendar; 
import java.util.Date; 

/** 
* 
* @author Saturn 
*/ 
public class AlphaProtocol { 
    private static final int CONNECTING = -1; 

    private static final int MOVE = 0; 
    private static final int NEW_PLAYER = 1; 
    private int state = CONNECTING; 
    private Calendar Date; 
    private Date Time = Date.getTime(); 

public String ProcessInput(String input){ 
    String output = null; 
    String name = null; 
    String X= null,Y = null; 

    if (input.equals("connect")){ 
     System.out.println("Connection granted!"); 

     output = Time + ":" + "Got a Connection over here!"; 
    } 
    if (input.equals("Bye!")){ 
     System.err.println("Client said Bye!"); 
    } 
    return output; 

} 

}

さて、これらはクライアントのファイルです:

デスクトップ:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package libgdx.test; 

import com.badlogic.gdx.backends.jogl.JoglApplication; 

/** 
    * 
    * @author Saturn 
    */ 
public class Desktop { 
    public static void main(String[] args) { 
    // TODO code application logic here 
    new JoglApplication(new LibGDXTest(),"Test #1",640,480,false); 

} 

}

LibGDXTest:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
    package libgdx.test; 

import com.badlogic.gdx.ApplicationListener; 
import com.badlogic.gdx.backends.jogl.JoglApplication; 
import com.badlogic.gdx.graphics.Texture; 
import com.badlogic.gdx.graphics.g2d.BitmapFont; 
import com.badlogic.gdx.graphics.g2d.SpriteBatch; 
import com.badlogic.gdx.math.Vector2; 
import java.util.Scanner; 

/** 
* 
* @author Saturn 
*/ 
    public class LibGDXTest implements ApplicationListener { 
    SpriteBatch spriteBatch; 
    Texture texture; 
    BitmapFont font; 
    Vector2 textPosition = new Vector2(100, 100); 
    Vector2 textDirection = new Vector2(1, 1); 
    String ip; 
    int port; 
    Networking net = new Networking(); 

    /** 
    * @param args the command line arguments 
    */ 


     @Override 
    public void create() { 
    Scanner in = new Scanner(System.in); 
    System.out.println("Hello, welcome to LibGDX Network test: #1 "); 
    System.out.println("Type the server ip in:"); 
    ip = in.next(); 
    System.out.println("Type the server port in:"); 
    port = in.nextInt(); 
    System.out.println("IP:" + ip + "Port:" + port); 
    net.Connect(ip,port); 

    } 

    @Override 
    public void resize(int i, int i1) { 

    } 

    @Override 
    public void render() { 

    } 

    @Override 
    public void pause() { 

    } 

    @Override 
    public void resume() { 

    } 

    @Override 
    public void dispose() { 

    } 

}

ネットワーキング:

Client: Hello, welcome to LibGDX Network test: #1 
    Type the server ip in: 
    127.0.0.1 // My INPUT! 
    Type the server port in: 
    4444 // My INPUT! 
    IP:127.0.0.1Port:4444 

そして:私はアプリケーションを実行すると、クライアント側ですべてのネットワーキングをhandelesクラスは、

/* 
    * To change this template, choose Tools | Templates 
    * and open the template in the editor. 
    */ 
    package libgdx.test; 

    /** 
    * 
    * @author Saturn 
    */ 
     import java.io.BufferedReader; 
     import java.io.IOException; 
     import java.io.InputStreamReader; 
     import java.io.PrintWriter; 
     import java.net.*; 
    import java.util.logging.Level; 
    import java.util.logging.Logger; 

    public class Networking { 

    private Socket Client; 
    private PrintWriter out; 
    private BufferedReader in; 


    public void Connect(String arg1, int arg2){ 
     try{ 
      Client = new Socket(arg1,arg2); 
       out = new PrintWriter(Client.getOutputStream(),true); 
      in = new BufferedReader(new InputStreamReader(Client.getInputStream())); 

     }catch(UnknownHostException uhk) { 
      System.err.println("Cannot find host:" + arg1); 
      System.exit(-1); 

     }catch (IOException ioe) { 
      System.err.println("Cannot get I/O for the connection:" + arg1); 
      System.exit(-1); 

     } 

     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
     String fromUser; 
     String fromServer; 
     try { 
      while ((fromServer = in.readLine()) != null) { 
       System.out.println("Server: " + fromServer); 
       if (fromServer.equals("Bye!")) 
        break; 

       fromUser = stdIn.readLine(); 
      if (fromUser != null) { 
        System.out.println("Client: " + fromUser); 
        out.println(fromUser); 
      } 
      } 
     } catch (IOException ex) { 
      Logger.getLogger(Networking.class.getName()).log(Level.SEVERE, null, ex); 
     } 



    } 
    } 

:)です

私はこれを取得サーバ:

Server listening! 
Networking! 
Networking! 
Networking! 
Networking! 
Networking! 
Networking! 
Networking! 

"Networking!"と表示されます。

助けていただけたら幸いです!

答えて

0

NetworkingThreadクラスpackage libgdx.server;では、クラスAlphaProtocolのoutputLine = alpha.ProcessInput(null);を呼び出していますが、nullを引数として指定しているので、関数はメソッドで定義されているとおりにnullを返すことに注意してください。変数入力はnullであるため、条件がtrueを満たさないため、出力は常にnullのままであり、このメソッドから戻されます。

あなた while ((fromServer = in.readLine()) != null) , the Client shuts itself down. So please try to provide some String value in place of null here,出力線= alpha.ProcessInput(「こんにちはクライアント」)のこのコードでは、そのヌル値を受信すると、クライアント側のネットワーククラスで非常に
public String ProcessInput(String input){ 
    String output = null; 
    String name = null; 
    String X= null,Y = null; 

    if (input.equals("connect")){ 
    System.out.println("Connection granted!"); 

     output = Time + ":" + "Got a Connection over here!"; 
    } 
    if (input.equals("Bye!")){ 
     System.err.println("Client said Bye!"); 
    } 
    return output; 
} 

; `

私はそれは問題であなただと思います物事を働かせることを目指すべきです。

Regards`

+0

ありがとうございます!もしあなたが私の場合はあなたを投稿するだろう:) –

+0

申し訳ありませんがタイプミス。その場合私はあなたに+ repを与えることができるでしょう:) –

1

あなたは、デバッガを使用した場合には明らかであろう、あなたのプログラムにバグを持っています。あなたは常に真であるnetworkingとして

while (networking) 
    System.out.println("Networking!"); 

を書かれている、これは際限なく実行されます。私はあなたがあなたがそれらを必要としないと確信するまで、あなたのループに{}を置くIDEsフォーマットを使用することをお勧めします。

+0

javaサーバソケットチュートリアルでは、彼らはそれを好きなので、私はそれをクリアするためのnessecaryのおかげだと思った!ありがとう!もし私があなたの投稿を投稿します:) –

+0

申し訳ありませんtypo。もし私があなたに+ repを与えることができれば –

関連する問題