AndroidStudio网络通信实验任务1任务2夏辉老师作业 - 小浣熊博客

AndroidStudio网络通信实验任务1任务2夏辉老师作业

发布者: 小浣熊

全网最全的网络资源分享网站

手机扫码查看

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

这篇文章总字数为:9531 字,有 0 张图存于本站服务器

实验设备:

  • windows系统
  • AndroidStudio
  • Eclipse-java-EE

实验开始前检查你的AndroidStudio模拟器是否可以联网。

检查步骤:

打开AndroidStudio->打开模拟器->打开模拟器中浏览器->输入www.mua222.cn

如果不能正常访问,你需要解决下面问题,如果可以访问,跳过下面网络修复,直接看教程。

解决AndroidStudio 模拟器无网络

无网络连接原因:

模拟器DNS和电脑DNS不一致,造成androidstudio模拟器不能解析域名,但是可以通过服务器IP访问网站。

解决办法:

网站方法我测试了很多,基本都过时了无效,最终找到了一个临时解决方法,这种配置是一次性的,下次再打开模拟器还是老样子,不过没问题,快结课了,将就一下,把实验交了吧。

具体操作:

打开你安装的SDK目录下的emulator目录,然后在地址栏清空输入cmd,回车

你也可以在桌面打开cmd输入cd emulator目录的路径。

比如这样:cd C:\Users\lenovo\AppData\Local\Android\Sdk\emulator

然后输入:emulator @Pixel_XL_API_29 -dns-server 8.8.8.8,114.114.114.114然后回车,这里的Pixel_XL_API_29是模拟器名称,你可以在AndroidStudio中找到并替换掉我这个名称。

你的模拟器会自动打开,可以正常运行你需要联网的项目了。但是使用模拟器期间一定不要关闭上面那个cmd窗口,否则模拟器会自动关闭,所有步骤重新来过

像我这样浏览器可以上网就可以做实验了。

任务1效果图:

任务1项目目录:

任务1实验代码:

activity_main.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/iv"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1000" />

    <EditText
        android:id="@+id/et_path"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="输入图片链接"
        android:text="https://www.mua222.cn/content/uploadfile/202004/4ecb1586702872.jpg"
        android:singleLine="true" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="浏览图片" />

</LinearLayout>

MainActivity.java文件:

package com.example.psps17180074;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends Activity {
    protected static final int CHANGE_UI = 1;
    protected static final int ERROR = 2;
    private EditText et_path;
    private ImageView iv;
    // 主线程创建消息处理器
    private Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            if(msg.what == CHANGE_UI){
                Bitmap bitmap = (Bitmap) msg.obj;
                iv.setImageBitmap(bitmap);
            }else if(msg.what == ERROR){
                Toast.makeText(MainActivity.this, "显示图片错误", 0).show();
            }
        };
    };
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_path = (EditText) findViewById(R.id.et_path);
        iv = (ImageView) findViewById(R.id.iv);
    }
    public void click(View view) {
        final String path = et_path.getText().toString().trim();
        if (TextUtils.isEmpty(path)) {
            Toast.makeText(this, "图片路径不能为空", 0).show();
        } else {
            //子线程请求网络,Android4.0以后访问网络不能放在主线程中
            new Thread() {
                public void run() {
                    // 连接服务器 get 请求 获取图片.
                    try {
                        URL url = new URL(path);       //创建URL对象
                        // 根据url 发送 http的请求.
                        HttpURLConnection conn = (HttpURLConnection) url
                                .openConnection();
                        // 设置请求的方式
                        conn.setRequestMethod("GET");
                        //设置超时时间
                        conn.setConnectTimeout(5000);
                        //设置请求头 User-Agent浏览器的版本
                        conn.setRequestProperty(
                                "User-Agent",
                                "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; " +
                                        "SV1; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; " +
                                        ".NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; Shuame)");
                        // 得到服务器返回的响应码
                        int code = conn.getResponseCode();
                        //请求网络成功后返回码是200
                        if (code == 200) {
                            //获取输入流
                            InputStream is = conn.getInputStream();
                            //将流转换成Bitmap对象
                            Bitmap bitmap = BitmapFactory.decodeStream(is);
                            //iv.setImageBitmap(bitmap);
                            //TODO: 告诉主线程一个消息:帮我更改界面。内容:bitmap
                            Message msg = new Message();
                            msg.what = CHANGE_UI;
                            msg.obj = bitmap;
                            handler.sendMessage(msg);
                        } else {
                            //返回码不是200  请求服务器失败
                            Message msg = new Message();
                            msg.what = ERROR;
                            handler.sendMessage(msg);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        Message msg = new Message();
                        msg.what = ERROR;
                        handler.sendMessage(msg);
                    }
                };
            }.start();
        }
    }
}

AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:dist="http://schemas.android.com/apk/distribution"
    package="com.example.psps17180074">
    <dist:module dist:instant="true" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-permission android:name="android.permission.INTERNET" />

</manifest>

任务2效果图:

任务2项目目录:

任务2实验代码:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <EditText
        android:id="@+id/etv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="给服务器发送信息"
        />
    <Button
        android:id="@+id/send"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/etv"
        android:text="发送"
        android:textSize="18sp"
        />
    <TextView
        android:id="@+id/txt1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/send"/>
</RelativeLayout>

MainActivity.java:

package com.example.ping17180074ps;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketTimeoutException;
public class MainActivity extends Activity{
    Socket socket=null;
    String buffer="";
    TextView txt1;
    Button send;
    EditText ed1;
    String geted1;
    public Handler myHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 1){
                Bundle bundle = msg.getData();
                txt1.append("server:"+bundle.getString("msg")+"\n");
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txt1 = (TextView) findViewById(R.id.txt1);
        send = (Button) findViewById(R.id.send);
        ed1 = (EditText) findViewById(R.id.etv);
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                geted1=ed1.getText().toString();
                txt1.append("client:"+geted1+"\n");
                new MyThread(geted1).start();
            }
        });
    }
    class  MyThread extends Thread{
        public String txt1;
        public MyThread(String str) {
            txt1 = str;
        }
        @Override
        public void run() {
            Message msg=new Message();
            msg.what=1;
            Bundle bundle=new Bundle();
            bundle.clear();
            try{
                socket =new Socket();
                socket.connect(new InetSocketAddress("10.0.2.2",12345),5000);
                OutputStream ou=socket.getOutputStream();
                BufferedReader bff=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String line = null;
                buffer="";
                while ((line = bff.readLine()) != null) {
                    buffer = line + buffer;
                }
                ou.write("android client".getBytes("gbk"));
                ou.flush();
                bundle.putString("msg",buffer.toString());
                msg.setData(bundle);
                myHandler.sendMessage(msg);
                bff.close();
                ou.close();
                socket.close();
            }catch (SocketTimeoutException aa){
                bundle.putString("msg", "Server connection is fail,please connect again.");
                msg.setData(bundle);
                myHandler.sendMessage(msg);
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}

AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:dist="http://schemas.android.com/apk/distribution"
    package="com.example.ping17180074ps">
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <dist:module dist:instant="true" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

-------下面是eclipse服务端代码-------

AndroidRunable.java文件:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
public class AndroidRunable implements Runnable {
    Socket socket = null;  

    public AndroidRunable(Socket socket) {  
        this.socket = socket;  
    }  
        @Override
        public void run() {
            String line = null;  
            InputStream input;  
            OutputStream output;  
            String str = "hello world!";  
            try {  
                //向客户端发送信息  
                output = socket.getOutputStream();  
                input = socket.getInputStream();  
                BufferedReader bff = new BufferedReader(  
                        new InputStreamReader(input));  
                output.write(str.getBytes("gbk"));  
                output.flush();  
                //半关闭socket    
                socket.shutdownOutput();  
                //获取客户端的信息  
                while ((line = bff.readLine()) != null) {  
                    System.out.print(line);  
                }  
                //关闭输入输出流  
                output.close();  
                bff.close();  
                input.close();  
                socket.close();  

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

        }  
    }

AndroidService.java文件:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class AndroidService {
    public static void main(String[] args) throws IOException {  
        ServerSocket serivce = new ServerSocket(12345);  
        while (true) {  
            //等待客户端连接  
            Socket socket = serivce.accept();  
            new Thread(new AndroidRunable(socket)).start();  
        }  
    }  
}

Eclipse代码配置

话不多说,直接图解吧。

 

另一个javawen文件也这么创建,然后都保存。

完结撒花!!!

本文最后更新于2020-6-2,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
分享到:
打赏
-版权声明-

阅读时间:  发布于:2020-6-2
文章标题:《AndroidStudio网络通信实验任务1任务2夏辉老师作业》
本文链接:https://www.mua222.cn/post-212.html
本文编辑: 小浣熊,转载请注明超链接和出处小浣熊博客
收录状态:[百度已收录][360已收录][搜狗已收录]

评论

     快速回复: 支持 感谢 学习 不错 高兴 给力 加油 惊喜
  1. #5
    哎呦我去游客 Lv.1  

  2. #4
    游客 Lv.2  

  3. #3
    舒明舒明游客 Lv.1  

  4. #2
    小小的奋斗游客 Lv.1  

  5. #1
    LIdu游客 Lv.1  

切换注册

登录

忘记密码?

您也可以使用第三方帐号快捷登录

切换登录

注册

AndroidStudio网络通信实验任务1任务2夏辉老师作业

长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏