当前位置: 代码迷 >> Android >> android socket客户端向服务器端发送数据,如何才能在点击Button的情况下获取数据
  详细解决方案

android socket客户端向服务器端发送数据,如何才能在点击Button的情况下获取数据

热度:15   发布时间:2016-04-28 00:54:52.0
android socket客户端向服务器端发送数据,怎么才能在点击Button的情况下获取数据
大神们,帮帮小弟啊。
下面的是服务器端代码,java
public class SocketServer{
public static void main(String[] args) {
new UserThread().start();
}

}


class UserThread extends Thread{
ServerSocket ss = null;
public void run() {
try {
ss = new ServerSocket(30000);
System.out.println("start");
Socket socket = ss.accept();
System.out.println("connected");

InputStream in = socket.getInputStream();

System.out.println("开始录入数据");
String Msg = null;

System.out.println("1");
int buffSize = 1024;
System.out.println("2");
byte[] temp = new byte[buffSize];  
        int size = 0;  

System.out.println("3");
        while ((size = in.read(temp)) != -1) {  
           Msg = new String(temp, 0, size);  
        }
        System.out.println("录入完毕");
System.out.println(Msg);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

下面是客户端代码,android
public class MainActivity extends Activity{


EditText show;
EditText dataToServer;
Button sendMessage;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        show = (EditText) findViewById(R.id.show);
        dataToServer = (EditText) findViewById(R.id.dataToServer);
        sendMessage = (Button) findViewById(R.id.sendMessage);
        
        
        new Thread(){
        
         @Override
         public void run(){
         try {
Socket socket = new Socket("49.140.100.147", 30000);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = br.readLine();
show.setText("Message from server " + line);
//这里是客户端向服务器端发送数据

sendMessage.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
sendMsg();
}
});

br.close();
socket.close();

} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
         }
        }.start();
        
    }
    
    public void sendMsg(){
     String info = getData(dataToServer);
     Log.i("ContentOfEditText", info);
     try {
     Socket socket = new Socket("49.140.100.147", 30000);
     OutputStream  out = socket.getOutputStream();
     out.write(info.getBytes("UTF-8"));
    
    
     out.close();
} catch (Exception e) {
e.printStackTrace();
}
    }
    
    public String getData(EditText item){
     return item.getText().toString();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}


基本思路就是我在点击button之后将EditText的内容发到服务器,但是问题来了,我在打开客户端之后,客户端与服务器端连接,服务器端直接就在InputStream中取数据了,这个怎么办啊。就是怎么在点击按钮之后才去获取数据呢。兄弟们,帮帮我啊.分不多,但是全给了。

------解决思路----------------------
把那个oncreate里的线程放到onclick里吧
------解决思路----------------------
按钮setOnClickListener(new OnClickListener() {

   public void onClick(View v) {
    //在这里new Thread 连接服务器即可,不用一进来就开启线程
  }
});
  相关解决方案