前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WIFI环境下Android手机和电脑通信

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

作者头像
用户1215536
发布2018-02-05 15:26:12
1.7K0
发布2018-02-05 15:26:12
举报

前面已经写过一篇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中控制控件了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-07-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档