android局域网内通过socket通信

来源:互联网 发布:杭州连邦软件 编辑:程序博客网 时间:2024/05/18 03:28

两台android手机在局域网内通过socket通信:
1:两个手机需要在同一个局域网里面
2:修改客户端Client里面的IP地址,IP地址设置为作为服务端的手机的IP地址
3:最下面为服务端,要安装到一个手机里并先运行起来,会显示本机IP地址,显示Client传来的信息,并给Client反馈
4:Client为客户端,有一个输入框和发送按钮,显示传过去的信息


client端

/** * create by caoyinfei  */public class MainActivity extends Activity {    TextView result;    Button send;    EditText input;    public Handler myHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            if (msg.what == 1) {                result.append("server:" + msg.obj + "\n");            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        result = (TextView) findViewById(R.id.result);        send = (Button) findViewById(R.id.send);        input = (EditText) findViewById(R.id.input);        send.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                String inputContent = input.getText().toString();                result.append("client:" + inputContent + "\n");                //启动线程 向服务器发送和接收信息                new MyThread(inputContent).start();            }        });    }    class MyThread extends Thread {        public String content;        public MyThread(String str) {            content = str;        }        @Override        public void run() {            //定义消息            Message msg = new Message();            msg.what = 1;            try {                //连接服务器 并设置连接超时为5秒                Socket socket = new Socket();                socket.connect(new InetSocketAddress("10.100.165.33", 30000), 1000);                //获取输入输出流                OutputStream ou = socket.getOutputStream();                //获取输出输出流                BufferedReader bff = new BufferedReader(new InputStreamReader(                        socket.getInputStream()));                //向服务器发送信息                ou.write(content.getBytes("utf-8"));                ou.flush();                //读取发来服务器信息                String result = "";                String buffer = "";                while ((buffer = bff.readLine()) != null) {                    result = result + buffer;                }                msg.obj = result.toString();                //发送消息 修改UI线程中的组件                myHandler.sendMessage(msg);                //关闭各种输入输出流                bff.close();                ou.close();                socket.close();            } catch (SocketTimeoutException aa) {                //连接超时 在UI界面显示消息                msg.obj =  "服务器连接失败!请检查网络是否打开";                //发送消息 修改UI线程中的组件                myHandler.sendMessage(msg);            } catch (IOException e) {                e.printStackTrace();            }        }    }}

server端:

/*** create by caoyinfei */public class MainActivity extends Activity {    public static TextView client_content, ip;    private String serverIp = "";    String buffer = "";    public static Handler mHandler = new Handler() {        @Override        public void handleMessage(android.os.Message msg) {            if (msg.what == 1) {                client_content.append("client" + msg.obj + "\n");            }        }        ;    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        client_content = (TextView) findViewById(R.id.client_content);        ip = (TextView) findViewById(R.id.ip);        serverIp = getlocalip();        ip.setText("IP addresss:" + serverIp);        LogUtil.d("dd","ddddddddddd");        new Thread() {            public void run() {                OutputStream output;                String serverContent = "hello hehe";                try {                    ServerSocket serverSocket = new ServerSocket(30000);                    while (true) {                        Message msg = new Message();                        msg.what = 1;                        try {                            Socket socket = serverSocket.accept();                            //向client发送消息                            output = socket.getOutputStream();                            output.write(serverContent.getBytes("utf-8"));                            output.flush();                            socket.shutdownOutput();                            //获取输入信息                            BufferedReader bff = new BufferedReader(new InputStreamReader(socket.getInputStream()));                            //读取信息                            String result = "";                            String buffer = "";                            while ((buffer = bff.readLine()) != null) {                                result = result + buffer;                            }                            msg.obj = result.toString();                            mHandler.sendMessage(msg);                            bff.close();                            output.close();                            socket.close();                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                } catch (IOException e1) {                    e1.printStackTrace();                }            }            ;        }.start();    }    private String getlocalip() {        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);        WifiInfo wifiInfo = wifiManager.getConnectionInfo();        int ipAddress = wifiInfo.getIpAddress();        //  Log.d(Tag, "int ip "+ipAddress);        if (ipAddress == 0) return null;        return ((ipAddress & 0xff) + "." + (ipAddress >> 8 & 0xff) + "."                + (ipAddress >> 16 & 0xff) + "." + (ipAddress >> 24 & 0xff));    }}
2 0