做socket的时候,当输错IP地址或服务器没有打开时程序总会异常停止,怎样让程序提示错误后不关闭

解决方案 »

  1.   

    就打印异常,catch到异常不处理就会继续运行
      

  2.   

    try {
        socket.connect........
    } catch(Exception ex) {
        Log.d(TAG, "IP地址错误或服务器没有打开");
        ex.printStackTrace();
    } finally {
        socket.close.....
    }
    用try catch捕获异常就不会导致程序崩溃,还可以继续运行。
      

  3.   

    我用了try{}catch{}怎么还是会崩溃
      

  4.   

    package com.example.chatactivity;import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetSocketAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;public class MainActivity extends Activity implements Runnable{
    private EditText ipaddr;
    private EditText recvmsg;
    private EditText sendmsg;
    private Button send;
    private Button start;
    private Button stop;
    private String ip=null;
    private String sendtext;
    Socket socket;
    Thread thread;
    InputStream in;
    OutputStream out; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ipaddr=(EditText)findViewById(R.id.iptext);
    recvmsg=(EditText)findViewById(R.id.recvtext);
    sendmsg=(EditText)findViewById(R.id.sendtext);
    send=(Button)findViewById(R.id.send);
    start=(Button)findViewById(R.id.start);
    stop=(Button)findViewById(R.id.stop);
    stop.setEnabled(false);
    send.setEnabled(false);
    start.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    ip=ipaddr.getText().toString();
    try {
    socket=new Socket();
    socket.connect(new InetSocketAddress(ip,8888));
    //in=new DataInputStream(socket.getInputStream());
    //out=new DataOutputStream(socket.getOutputStream());
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    recvmsg.setText("");
    recvmsg.setText("无法连接");
    //e.printStackTrace();
    //Toast.makeText(this, "host name could not be resolved into an IP address", Toast.LENGTH_SHORT);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    //e.printStackTrace();
    recvmsg.setText("无法连接");
    }
    thread=new Thread(MainActivity.this);
    thread.start();
    start.setEnabled(false);
    stop.setEnabled(true);
    send.setEnabled(true);
    }
    });
    send.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    sendtext=sendmsg.getText().toString();
    if(sendtext!=null){
    try {
    out.write(sendtext.getBytes());
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    });
    stop.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    try {
    in.close();
    out.close();
    socket.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    stop.setEnabled(false);
    start.setEnabled(true);
    send.setEnabled(true);
    }
    });
    } @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;
    } @Override
    public void run() {
    // TODO Auto-generated method stub

    try {
    in=new DataInputStream(socket.getInputStream());
    } catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    try {
    out=new DataOutputStream(socket.getOutputStream());
    } catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    while(true){
    try {
    String recvtext;
    byte[] buffer = new byte[in.available()];
    in.read(buffer);
    recvtext= new String(buffer);
    Message m=mHandler.obtainMessage();
    m.what=0x1;
    Bundle bundle=new Bundle();
    bundle.putString("recv", recvtext);
    m.setData(bundle);
    mHandler.sendMessage(m);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    Handler mHandler=new Handler(){
    public void handleMessage(Message msg){
    if(msg.what==0x1){
    recvmsg.append(msg.getData().getString("recv"));
    super.handleMessage(msg);
    }
    }
    };}
    这是代码,只要连接不上就会崩溃