移动终端大作业

  • Post author:
  • Post category:其他




一、题目要求

本次大作业2道题。



第1题 网络通信程序。

用PC作服务器、移动端作客户机,编程实现服务器和客户端的非阻塞通信。



第2题 图形变换。

有若干个点、线段、圆和三角形,对这些图形进行平移和绕任意的旋转变换。如:

对点的操作:

点

对线段的操作:

线段

对圆的操作:

圆

对三角形的操作:

三角形

如果是旋转操作,则要给出旋转参考点和角度,如:

输入相应的数据后,要用另外一个Activity进行变换计算,如:

变化

变化

点击按钮“用另一个ACTIVITY完成变换计算”,则切换到另一个ACTIVITY:

在这里插入图片描述

按“变换”后:

在这里插入图片描述

按“返回”后:

返回后



二、实现过程



第1题



一、 分析与设计

本题要实现PC端作服务器和android端作客户端之间的非阻塞通信。(从android端发送一条信息到PC端,PC端可以接受,并可以把这条信息返回到android端并且显示出来。)

首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路。使用ServerSocket创建TCP服务器端,然后在Android客户端使用Socket的构造器来连接服务器。

1、PC服务器启用ServerSocket

两个通信实体在建立虚拟链路之前,需要有一方先准备好,主动接受来自其他通信实体的连接请求。使用ServerSocket对象监听来自客户端的Socket连接。 如果没有连接,则将一直处于等待状态。

2、Android终端使用Socket通信

客户端使用Socket的构造器连接服务器,指定服务器IP和端口号就可以了。

IP为无线局域网适配器 WLAN的IPv4 地址

Socket s = new Socket(“192.168.43.190”, 12345);

这样服务器端的accept()方法就得到响应,从而向下执行,服务器端和客户端就形成了一对互相连接的Socket。再进行通信时就没有服务器和客户端之分了,都是通过输入输出流进行通信。

注意点:

1、由于程序里面需要Socket进行网络通信,所有程序里面只需要一个Socket,切不可使用多个Socket,既Socket的new对象只需要一个就好了。

2、记得要在android中添加访问网络的权限

3、在android端中没有流和socket的关闭,在PC使用的是ServerSocket;android端使用的是Socket

4、只有客户端发送了信息给服务器后,服务器才能响应客户端的输入,然后返回信息给客户端,这时客户端才能读取服务器返回的信息。如果客户端和服务器都处于等待对方的信息,那样就会造成阻塞,导致ANR了。



二、 程序结构

MainActivity.java

在这里插入图片描述

TcpSocketServer.java

在这里插入图片描述



三、实现方法

socket是指在一个特定编程模型下,进程之间通信链路的端口。一个socket包括两个流,一个输入流和一个输出流。

实现思路

1、服务器分配一个端口号,监听端口是否有连接请求。如果客户端请求一个连接,服务器使用accept()方法打开socket连接。

2、客户在host的port端口建立连接。

3、服务器和客户使用InputStream和OutputStream进行通信。

服务器端ServerSocket的实现

在该实例中,我们在Eclipse中新建了一个Java工程作为服务器端。在该Java工程中,我们应该完成以下的操作。

(1)指定端口实例化一个ServerSocket,并调用ServerSocket的accept()方法在等待客户端连接期间造成阻塞。

(2)每当接收到客户端的Socket请求时,服务器端也相应的创建一个Socket,并将该Socket存入ArrayList中。与此同时,启动一个ServerThread线程来为该客户端Socket服务。

(3)在启动的newCachedThreadPool线程池的线程中,我们需要将读到的客户端内容(也就是某一个客户端Socket发送给服务器端的数据),发送给其他的所有客户端Socket,实现信息的广播。

客户端Socket的实现

(1)在Android工程中,创建一个客户端Socket,并在newCachedThreadPool线程池中启动一个客户端线程来监听服务器发来的数据。

(2)利用Runnable自定义线程

Runnable创建步骤:

  1. 自定义一个类实现Runnable接口。
  2. 实现Runnable接口 的run方法,把自定义线程的任务定义在run方法上。
  3. 创建Runnable实现类对象。



四、运行与界面

在这里插入图片描述

在这里插入图片描述



第2题



一、 分析与设计

有若干个点、线段、圆和三角形,对这些图形进行平移和绕任意的点旋转变换。

由本题意可知,要实现四种图形点,线段,圆和三角形,和任意图形的两种变化(平移或旋转)

因为要实现动态页面设置,所有要实现一个主页面,一个计算界面,一个跳转页面,四个图形框,两个变化框。其中运用RadioGroup控件实现唯一选择,运用inflate函数把选择的图形布局和变化布局添加至主页面,然后再运用intent组件实现页面的跳转。

所有一个需要实现八个布局页面,两个java运行代码,主函数java用于输入数据,跳转页面,计算函数java用于计算变化图形,返回界面。



二、程序结构

在这里插入图片描述



三、实现方法

要实现RadioButton由两部分组成,也就是RadioButton和RadioGroup配合使用,其中RdioGroup是单选组合框,可以容纳多个RadioButton的一个容器。在没有RadioGroup的情况下,RadioButton可以全部被选中;当多个RadioButton被RadioGroup包含的情况下,RadioButton只可以选择一个,从而达到了单选的目的。并用setOnCheckChangeLinstener()来对单选按钮进行监听。

inflate函数的作用

作用一:可以获取某个xxx.xml布局文件,这个函数的返回值就是获取的布局文件

findViewById()函数是获取布局文件中的某个控件,这个函数就是获取布局文件。

作用二:将布局文件添加到某个布局中。

使用Intent能够使程序在不同活动中跳转,意及能够使用不同界面。Intent用法分为显示和隐式。

Intent概念:Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。

Intent一般可被用于启动活动、启动服务、以及发送广播等场景



四、运行与界面

对点的平移操作:

在这里插入图片描述

在这里插入图片描述

对线段的平移操作:

在这里插入图片描述

在这里插入图片描述

对圆的平移操作:

在这里插入图片描述

在这里插入图片描述

对三角形的旋转操作:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



五、文档撰写

代码:

MainActivity.java:通过inflate函数通过点击单选按钮实现布局的添加,然后输入数据,传入数据并跳转页面至main_ac.java。

main_ac.java:接收MainActivity.java传至的数据,并进行处理,然后按照之前的选择,对数据进行平移或旋转操作,并显示原始图形数据,和变化后的数据,实现计算功能和跳转页面功能。

布局:

activity_main.xml:添加三个文本框,添加一个单选框四个单选按钮,添加一个单选框两个单选按钮,添加一个按钮用于跳转页面。

main.xml:添加两个文本框用于显示原始图形,再添加两个文本框用于显示变化后的图形,添加一个按钮用于计算得到变化后的图形,添加一个按钮用于返回至acticity_main.xml页面。

dian.xml:添加文本框和输入框,实现点的坐标的输入。

xianduan.xml: 添加两个文本框和输入框,实现起点的坐标和终点坐标的输入。

yuan.xml: 添加两个文本框和输入框,实现圆的坐标和圆的半径的输入。

sanjiaoxing.xml: 添加三个文本框和输入框,实现三角形的三个坐标的输入。

pingpy.xml: 添加文本框和输入框,实现x和y平移量的输入。

xuanzhuan.xml: 添加两个文本框和输入框,实现旋转参考点的坐标和旋转角度的输入。



三、大作业报告及源码


android大作业



版权声明:本文为weixin_43846708原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。