87年的90后 2015-07-20 01:10 采纳率: 75%
浏览 4610
已结题

Android应用socket创建失败,抛出IOException,大神帮忙看看因为什么

上代码:
服务器端

 package com.boge.server.model;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

import com.boge.mq.common.User;
import com.boge.mq.common.YQMessage;
import com.boge.mq.common.YQMessageType;

public class MQServer
{
    ServerSocket mServerSocket = null;
    Socket mSocket = null;

    ObjectInputStream oic = null;
    ObjectOutputStream oos = null;

    public MQServer()
    {
        try
        {
            mServerSocket = new ServerSocket(30000);

            System.out.println("MQ服务器已启动 in " + new Date());
            while (true)
            {
                mSocket = mServerSocket.accept();
                oic = new ObjectInputStream(mSocket.getInputStream());
                oic.close();
                oos.close();
                mSocket.close();
            }
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

Android应用界面:

 package com.boge.mq.client.view;

import com.boge.mq.R;
import com.boge.mq.common.User;
import com.goge.mq.client.model.ClientConServerThread;
import com.goge.mq.client.model.MQClient;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends Activity
{
    Context mContext = null;

    EditText et_account, et_password;
    public Handler handler;

    public User user=null;
    public ClientConServerThread clientThread;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        mContext = this;
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_login);

        et_account = (EditText) findViewById(R.id.et_account);
        et_password = (EditText) findViewById(R.id.et_password);

        handler = new Handler()
        {
            @Override
            public void handleMessage(Message msg)
            {
                if (msg.what == 0x123)
                {
                    Intent intent = new Intent(mContext, MainActivity.class);
                    startActivity(intent);
                }
            }
        };

        Button btn_login = (Button) findViewById(R.id.btn_login);
        btn_login.setOnClickListener(new OnClickListener()
        {

            @Override
            public void onClick(View arg0)
            {
                 login(123, "123");
            }
        });
    }

    public void login(int a, String p)
    {
        user=new User();
        user.setAccount(a);
        user.setPassword(p);

        clientThread=new ClientConServerThread(handler,user);
        clientThread.start();
    }
}

socket线程

 package com.goge.mq.client.model;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketTimeoutException;

import android.os.Handler;
import android.os.Message;

import com.boge.mq.common.User;
import com.boge.mq.common.YQMessage;

public class ClientConServerThread extends Thread
{
    Socket socket = null;
    ObjectOutputStream osStream = null;
    ObjectInputStream inStream = null;

    User user;
    YQMessage mess = null;
    Handler handler;
    public Handler revHandler;

    public ClientConServerThread(Handler h, User u)
    {
        user = u;
        handler = h;
    }

    @Override
    public void run()
    {
        try
        {
            socket = new Socket();
            try
            {
                socket.connect(new InetSocketAddress("192.168.1.140", 30000), 2000);

            } catch (SocketTimeoutException e)
            {
                e.printStackTrace();
            }

            osStream = new ObjectOutputStream(socket.getOutputStream());
            inStream = new ObjectInputStream(socket.getInputStream());
            Message msg = new Message();
            msg.what = 0x123;
            handler.sendMessage(msg);
            socket.close();
            osStream.close();
            inStream.close();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

我已确定,就是在厦门这句除了问题,抛出IO异常

 try
            {
                socket.connect(new InetSocketAddress("192.168.1.140", 30000), 2000);

            }

求大神解答

  • 写回答

3条回答 默认 最新

  • Android之禅 2015-07-20 02:10
    关注

    首先你有没有添加网络权限,其次你
    服务端为什么一连上就close呢?这样会导致客户端异常。希望能帮住你

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行