• WIFI环境下Android手机和电脑通信


    前面已经写过一篇java实现最基础的socket网络通信,这篇和之前那篇大同小异,只是将客户端代码移植到手机中,然后获取本机IP的方法略有不同。

    先讲一下本篇中用到Android studio的使用吧

    使用Android studio开发Android最基本的3个步骤:

    (1)新建工程

    (2)在XML布局文件中定义应用程序的用户界面。

    点击画圈中的Design和Text可以切换界面

    (3)在java代码中编写业务实现。

    这里面用来写java代码

    另外这篇文章还需要添加用户权限

    好了,可以上代码了:

    Android服务器端代码:

    package com.example.x_yp.socket;
    
    import android.net.wifi.WifiInfo;
    import android.net.wifi.WifiManager;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.TextView;
    import java.net.*;
    import java.io.*;
    
    public class MainActivity extends ActionBarActivity
    {
    
        //定义侦听端口号
        final int SERVER_PORT = 30000;
        @Override
    
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //打印本机的IP地址
            TextView myip=(TextView)findViewById(R.id.myip);
            myip.setText(getLocalIpAddress());
            //开一个新的线程来侦听客户端连接
           new Thread()
            {
                public void run()
                {
                    startServer();
                }
            }.start();
        }
        // 得到本机WIFI下的ip地址
        private String getLocalIpAddress()
        {
            WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            // 获取32位整型IP地址
            int ipAddress = wifiInfo.getIpAddress();
    
            //返回整型地址转换成“*.*.*.*”地址
            return String.format("%d.%d.%d.%d",
                    (ipAddress & 0xff), (ipAddress >> 8 & 0xff),
                    (ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));
        }
    
        //进行socket连接通信
        private void startServer()
        {
            try
            {
                ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
                //循环侦听客户端连接请求
                while (true)
                {
                    Socket ss = serverSocket.accept();
                    try
                    {
                        // 将Socket对应的输出流包装成PrintStream
                        PrintStream ps = new PrintStream(ss.getOutputStream());
                        // 进行普通IO操作
                        ps.println("hello,you have recevied sever's messege");
                        // 关闭输出流,关闭Socket
                        ps.close();
                        ss.close();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                    finally
                    {
                        ss.close();
                    }
                    Thread.sleep(3000);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }

    PC客户端代码:

    /**
    PC端代码
    PC作为客户端,根据服务器的IP地址和端口号连接服务器
    */
    import java.net.*;
    import java.io.*;
    
    public class PC_Client
    {
        public static void main(String[] args)
            throws IOException
        {
            //Socket socket = new Socket("192.168.47.1" , 30000);//这里的IP地址填写手机端服务器的IP地址
            Socket socket = new Socket("192.168.1.114" , 30000);//这里的IP地址填写手机端服务器的IP地址
            // 将Socket对应的输入流包装成BufferedReader
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            // 进行普通IO操作
            String line = br.readLine();
            System.out.println("来自服务器的数据:" + line);
            // 关闭输入流、socket
            br.close();
            socket.close();
        }
    }

    OK,下载到手机中,手机和电脑可以通信了

     补充一下用到的图形界面的内容:

    这里添加完控件之后,设置一个ID,这里设置成了myip

    然后java程序中,通过 findViewById函数与控件相连接,

    这里用TextView myip=(TextView)findViewById(R.id.myip);

    然后就可以在java中控制控件了

  • 相关阅读:
    0302思考并回答一些问题
    1231 实验四 递归下降语法分析程序设计
    1118 实验三 有限自动机的构造与识别
    1112对他人的博客评论及建议
    1029c语言文法
    1022词法分析实验总结
    词法分析
    0330 复利计算——单元测试
    0321 读《构建之法》第一,二,三章有感
    0316 复利计算总结(0330 更新)
  • 原文地址:https://www.cnblogs.com/bewolf/p/4644493.html
Copyright © 2020-2023  润新知