qq_37408845 2017-04-04 15:14 采纳率: 0%
浏览 4898

抛SocketException: Socket is not connected

想些一个聊天软件 pc端服务器和客户端都写好了,但是再写安卓端时老是会出现
W/System.err: java.net.SocketException: Socket is not connected
W/System.err: at java.net.Socket.getOutputStream(Socket.java:921)
W/System.err: at server.MyMessage.send(MyMessage.java:66)
W/System.err: at com.example.linqijun.qaclient.MainPageActivity$Destory.run(MainPageActivity.java:132)
W/System.err: at java.lang.Thread.run(Thread.java:761)
我是将注册页面的socket传到mainui上用的,结果会出这个问题,网上也查不到,第一次提问,不符合规矩的地方还请大大们原谅。

代码如下

public class LoginActivity extends AppCompatActivity {

    private EditText accountEdit;

    private EditText passwordEdit;

    private Button loginB;

    private Button registerB;



    private Handler handler = new Handler(){

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);


            Toast.makeText(LoginActivity.this,msg.obj.toString(),Toast.LENGTH_SHORT).show();
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_login);

        accountEdit = (EditText) findViewById(R.id.account);
        passwordEdit = (EditText) findViewById(R.id.password);

        registerB = (Button) findViewById(R.id.register);

        registerB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //启动注册
                Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);
                startActivity(intent);
            }
        });

        loginB = (Button) findViewById(R.id.login);

        loginB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(accountEdit.getText().toString().equals("") || passwordEdit.getText().toString().equals("")){
                    Toast.makeText(LoginActivity.this,"can't be empty",Toast.LENGTH_SHORT).show();
                    return;
                }
                new Thread(new LoginThread()).start();
            }
        });
    }


    private class LoginThread implements Runnable{
        private MySocket so;
        @Override
        public void run() {
            try {

                so = new MySocket("10.0.2.2",6870);

                double id = Double.parseDouble(accountEdit.getText().toString());
                String password = passwordEdit.getText().toString();

                User temp = new User(id,"0");
                temp.setPassWord(password);
                MyMessage mgs = new MyMessage(temp);
                mgs.setType(1);
                mgs.send(so);

                DataInputStream dis = new DataInputStream(so.getInputStream());
                ObjectInputStream ois = new ObjectInputStream(dis);
                MyMessage res = (MyMessage)ois.readObject();

                if(res.getString().equals("success")){
                    //启动mainui activity
                    User toNext = res.getUser();
                    Intent intent = new Intent(LoginActivity.this,MainPageActivity.class);//"extre data",toNext,so);
                    Bundle bundle = new Bundle();
                    bundle.putSerializable("mgs",res);
                    bundle.putSerializable("so",so);
                    intent.putExtras(bundle);

                    startActivity(intent);
                    finish();
                }else{
                    Message a = new Message();
                    a.obj = res.getString();
                    handler.sendMessage(a);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            while(true){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }


    }

}

然后是mainui的代码

public class MainPageActivity extends AppCompatActivity {

    private MyMessage mgs;

    private User u;

    private MySocket so;

    private ImageButton userHead ;

    private TextView userName ;

    private ListView friends;

    private ArrayList<User> friendList ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_main_page);

        Intent intent = getIntent();
        mgs = (MyMessage) intent.getSerializableExtra("mgs");
        so = (MySocket)  intent.getSerializableExtra("so");
        u = mgs.getUser();
        friendList = u.getFriends();


        //名字
        String nameTemp = u.getName() + " ( "+ ((Double)u.getID()).toString() + " )";
        userName = (TextView) findViewById(R.id.main_userName);
        userName.setText(nameTemp);

        //头像
        userHead = (ImageButton)findViewById(R.id.main_head_photo);
        int photo = u.getPhotoType();

        switch (photo){
            case 0:
                userHead.setImageResource(R.drawable.f0);
                break;
            case 1:
                userHead.setImageResource(R.drawable.f1);
                break;
            case 2:
                userHead.setImageResource(R.drawable.f2);
                break;
            case 3:
                userHead.setImageResource(R.drawable.f3);
                break;
            case 4:
                userHead.setImageResource(R.drawable.f4);
                break;
            case 5:
                userHead.setImageResource(R.drawable.f5);
                break;
            case 6:
                userHead.setImageResource(R.drawable.f6);
                break;
            case 7:
                userHead.setImageResource(R.drawable.f7);
                break;
            case 8:
                userHead.setImageResource(R.drawable.f8);
                break;
            case 9:
                userHead.setImageResource(R.drawable.f9);
                break;
            case 10:
                userHead.setImageResource(R.drawable.f10);
                break;
            case 11:
                userHead.setImageResource(R.drawable.f11);
                break;
        }

        //好友列表

        FriendAdapter adapter = new FriendAdapter(MainPageActivity.this,R.layout.friend_list,friendList);
        friends = (ListView)findViewById(R.id.main_friendList);
        friends.setAdapter(adapter);
        friends.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                User inTalk = friendList.get(position);

            }
        });

    }

    @Override
    protected void onDestroy() {

        new Thread ( new Destory()).start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        super.onDestroy();
    }

    private class Destory implements Runnable{

        @Override
        public void run() {

            MyMessage exitmsg = new MyMessage(u);
            exitmsg.setType(2);
            exitmsg.send(so);

        }
    }

} 
  • 写回答

1条回答

  • threenewbee 2017-04-04 15:24
    关注

    so = new MySocket("10.0.2.2",6870);
    有没有防火墙,这个ip端口能不能连上,网络本身是否通,在一个网段么?

    评论

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试