繁体   English   中英

android中的客户端服务器

[英]client-server in android

我已经尝试了几天来创建一个应用程序客户端服务器,在Android上,在同一台机器上运行....我已经使用所有类型的显示功能来显示客户端和服务器的状态......经过努力,我已经成功连接了他们,这并不是很难。

我面临的一个大问题是从客户端向服务器发送数据。

我已经使用DisplayTitle()函数在服务器端显示来自客户端的数据 - 但它从未显示任何内容

我认为问题在于发送数据因为我正在使用PrintWriter发送数据而且我已经读过我应该刷新它以执行此操作 - 否则只有在我的缓冲区已满时才会发送数据。 ..我已经做到了,仍然没有!

这是我的客户端代码:


public class screen1 extends Activity {

    private TextView clientState;
    private String serverIpAddress="10.0.2.2";
    public static final int ClientPort = 8080;
    String message="Hello Server!";
    int longitude;
    int latitude;
      Cursor c;
    DBAdapter db;
    private Handler handler=new Handler();
    Socket socket;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.screen1);
        clientState = (TextView) findViewById(R.id.client_Status);

        Button b = (Button)findViewById(R.id.mainMenu);
        b.setOnClickListener(new View.OnClickListener() {
           public void onClick(View arg0) {
           Intent i = new Intent(screen1.this, screen2.class);
           startActivity(i);
           } 
        });

     Thread cThread=new Thread(new ClientThread()); 
     cThread.start();  
    db=new DBAdapter(this);
    db.createDatabase();
    db.openDataBase();


    }


   public class ClientThread implements Runnable{

       private PrintWriter out=null;

        public void run()

        {

            try

            {

                InetAddress serverAddr=InetAddress.getByName(serverIpAddress);

                handler.post(new Runnable(){

                    public void run(){

                        clientState.setText(" try to connect!");

                    }
                });
                socket=new Socket(serverAddr,ClientPort);
                PrintWriter out=new PrintWriter(socket.getOutputStream(),true);


            }
            catch(UnknownHostException e){
                 System.err.println("Don't know about host");
            }
            catch (IOException e) {
                System.err.println("Couldn't get I/O for the connection to host");
                     }

            if(socket!=null && out!=null){
            try{

                  c=db.getAllData();
             if(c.moveToFirst()) 
                {
                  do{

                      longitude=Integer.parseInt(c.getString(1));
                      out.println(longitude);
                      out.flush();
                      latitude=Integer.parseInt(c.getString(2));
                      out.println(latitude);

                     out.flush();
                  }while(c.moveToNext());

                     }
             out.close();
             socket.close();
                 }
            catch (IOException e) {
                System.err.println("IOException:  " + e);
            }

        }

   }

   }
}

这是我的服务器,在DisplayTitle()我尝试显示我应该从客户端收到的纬度和经度:

public class Server1 extends Activity {


    //the ip the server is listening to


    public static String SERVERIP="10.0.2.15";


    Socket client;

    Scanner s=null;

    TextView serverStatus;

    Handler handler=new Handler();

    protected int  ServerPort= 6000;

    int longitude;
    int latitude;

    protected boolean      isStopped    = false;
    private  ServerSocket serverSocket=null;
    private Socket clientSocket=null;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.server1);

        Button b = (Button)findViewById(R.id.mainMenu);

        serverStatus =(TextView)findViewById(R.id.server_Status);

        b.setOnClickListener(new View.OnClickListener() {
          public void onClick(View arg0){Intent i = new Intent(Server1.this, Server2.class);
           startActivity(i);}});
        Thread fst=new Thread(new ServerThread());
        fst.start();
       // MultiThreadedServer server = new MultiThreadedServer(6000);
      // new Thread(server).start();

    }


public class ServerThread implements Runnable{

    public void run(){

        try{
            InetSocketAddress serverAddr =new InetSocketAddress(SERVERIP,6000);
    serverSocket = new  ServerSocket();
    serverSocket.bind(serverAddr);

        handler.post(new Runnable(){public void run() {
            serverStatus.setText("wait for clients");
        }});


        while(true){
        //accept for incoming clients
        client= serverSocket.accept();
        handler.post(new Runnable(){public void run() {
            serverStatus.setText("Connected.");
        }});

        try{

            s=new Scanner(new BufferedReader(new InputStreamReader(client.getInputStream())));


            while(s.hasNext()){
                longitude=Integer.parseInt(s.next());
                System.out.println(longitude);
                latitude=Integer.parseInt(s.next());
                System.out.println(latitude);
            // db.insertData2(longitude,latitude);



                      handler.post(new Runnable() {

                            public void run() {
                               DisplayTitle(longitude,latitude);

                            }
                            }); 
                   }

            break;

        }
        catch(Exception e)
        {
            handler.post(new Runnable(){
                public void run(){
                    serverStatus.setText("Connection interrupted!!");
                }

            });
            e.printStackTrace();
        }



}
        }
catch(Exception e)

        {
         handler.post(new Runnable()
         {
             public void run(){
                 serverStatus.setText("Error");
             }
         });

         e.printStackTrace();

        }
    }
}


public void DisplayTitle(int longitude,int latitude)

{
 Toast.makeText(this, 
         "longitude: " + longitude +"\n" +

         "latitude: " + latitude +"\n" ,

         Toast.LENGTH_LONG).show();        
} 

}

如果有人知道我做错了什么,请告诉我! 我在这里了解更多细节。

如果您只是想查看要在客户端或服务器中发送的数据,使用调试输出显示您正在接收数据有什么问题? 您可以使用logcat。 只需在收到或发送数据时将数据打印到logcat。

Log.d(string, string);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM