Socket实现Android客户端与服务器的通信

前言:题目要求故写一下总结。


1.什么是Socket?

网络用语叫套接字原理是基于tcp/ip 协议的一种通信手段,目前题目中要求无非就是当客户端数据异常时推送给服务器报警信息

往常接下来都是先看效果图的,由于今天回宿舍有点早,准备有点匆忙,所以演示没准备,但代码都是测试通过的,直接贴代码吧.

这里写图片描述


* 2.MainActivity主类*

public class MainActivity extends Activity {EditText ip;EditText editText;TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ip = (EditText) findViewById(R.id.ip);editText = (EditText) findViewById(R.id.editText);tv = (TextView) findViewById(R.id.tv);//连接按钮findViewById(R.id.connect).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {connect();//连接}});//发送数据按钮findViewById(R.id.send).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {send();}});}// ------------------------------------------------------------------------------------Socket socket = null;BufferedWriter writer = null;BufferedReader reader = null;/*** 异步 实现socket与服务器的连接*/public void connect() {AsyncTask<Void, String, Void> read = new AsyncTask<Void, String, Void>() {@Overrideprotected Void doInBackground(Void... arg0) {try {socket = new Socket(ip.getText().toString(), 40000);writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));publishProgress("@success");} catch (UnknownHostException e1) {System.out.println(e1.toString());} catch (IOException e1) {System.out.println(e1.toString());}try {String line;while ((line = reader.readLine()) != null) {publishProgress(line);}reader.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}@Overrideprotected void onProgressUpdate(String... values) {if (values[0].equals("@success")) {Toast.makeText(MainActivity.this, "连接成功",Toast.LENGTH_SHORT).show();}tv.append("别人说:" + values[0] + "\n");super.onProgressUpdate(values);}};read.execute();}/*** socket 发送方法*/private void send() {try {tv.append("我说" + editText.getText().toString() + "\n");writer.write(editText.getText().toString() + "\n");writer.flush();editText.setText("");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

3.xml布局


<LinearLayout xmlns:tools="http://schemas.android.com/tools"xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"tools:context=".MainActivity" ><EditText
        android:id="@+id/ip"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="10.67.66.195" ></EditText><Button
        android:id="@+id/connect"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="连接" /><TextView
        android:id="@+id/tv"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="0.85" /><EditText
        android:id="@+id/editText"android:hint="发送的消息"android:layout_width="match_parent"android:layout_height="wrap_content" /><Button
        android:id="@+id/send"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="send"android:text="发送" /></LinearLayout>

4.总结

代码挺简单的,因为题目需求不高,所以就一个异步加载的方法实现与服务器的通信即可。

其实如果觉得麻烦,甚至还可以继续简化一些,直接把socket写在一个子线程就可以了

new Thread(){public void run() {try {Socket socket  = new Socket("192.168.100.1",4000);.......} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}};}.start();

这种方法,甚至上上面异步都会牵扯如下问题:

无法程序启动后自动连接服务器、服务器未开启监听前程序启动会崩等等

具体这两种方式出现的如上问题都已解决,以及通过socket实现android客户端接收服务器端的图片等,后面慢慢总结…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完成聊天室的私聊功能

1 完成聊天室的私聊功能 完成聊天室私聊功能。私聊功能是指&#xff0c;客户端之间可以实现一对一的聊天。 服务器端程序启动后&#xff0c;将等待客户端连接&#xff0c;界面效果如图&#xff0d;1所示&#xff1a; 图&#xff0d;1 客户端程序运行时&#xff0c;需要用户先输…

高德地图跟百度地图经纬度互转

1、高德经纬度转百度经纬度&#xff1a; "http://api.map.baidu.com/geoconv/v1/?coords"endlo","endla"&from3&to5&ak""Hi7RspVbu9xQNVUi0S7iP0OLLQbNfn""&mcode07:63:0A:B5:14:92:C6:95:43:8C:5E:78:1D:27:27…

前端学习(2703):重读vue电商网站24之配置axios

在 main.js 文件内进行配置 那么&#xff0c;此时我们就可以通过 this访问登录组件原型上 $http 方法&#xff0c;来发起对后端的请求了。

StudentManager-java+mysql学生管理系统

哎&#xff0c;还是没坚持写下来&#xff0c;时间过得也好快&#xff0c;转眼大二上学期就要结束了&#xff0c;算了&#xff0c;先附上几天写的java-mysql学生管理系统吧 先看效果图吧&#xff0c;没录动态图&#xff0c;将就着看吧 1.程序登陆&#xff0c;初始界面 2.根据名字…

message:MCODE参数不存在,mobile类型mcode参数必需

是不是高德地图转百度地图经纬度报错 问题是缺少mcode参数——也就是缺少安全码 解决方法&#xff1a;https://blog.csdn.net/meixi_android/article/details/84987062

前端学习(2704):重读vue电商网站25之保存token

将登录成功之后的 token&#xff0c;保存到客户端的 sessionStorage 中 项目中除了登录之外的其它 api 接口&#xff0c;必须在登录之后才能访问token 只应在当前网站打开期间生效&#xff0c;所以将 token 保存在 sessionStorage 中 通过编程式导航跳转到后台主页&#xff0c…

000 SpringMVC介绍

1.介绍 2.MVC 模型(Model)封装了应用程序数据&#xff0c;通常它们将由POJO类组成。视图(View)负责渲染模型数据&#xff0c;一般来说它生成客户端浏览器可以解释HTML输出。控制器(Controller)负责处理用户请求并构建适当的模型&#xff0c;并将其传递给视图进行渲染。3.Dispat…

前端学习(2705):重读vue电商网站26之路由导航守卫控制访问权限

如果用户没有登录&#xff0c;但是直接通过URL访问特定页面&#xff0c;需要重新导航到登录页面。 在之前的操作中&#xff0c;我们登录之后会种植一个 token 值&#xff0c;表示我们登录成功了&#xff0c;那么此时我们将 token 值去掉呢&#xff1f; 直接点击上述 clear all …

时隔多日,旧域名重用,niceyoo博客上线

前言 从昨天我的年算过完了&#xff0c;亲戚同学也走过来了&#xff0c;实在是觉得无聊&#xff0c;所以就开始在论坛呀、博客呀什么的乱逛&#xff0c;突然记起来博客好久没写了&#xff0c;不过并没着急写文章、 而是决定搭建一个域名博客&#xff0c;也算是一个激励自己学习…

iptables封禁端口

需求&#xff1a;之前运维的服务器&#xff0c;爆出漏洞&#xff0c;我要做的就是把5000接口封禁。 然后找了一些iptables的教程。最终解决方案如下&#xff1a; iptables -I FORWARD -p tcp --dport 5000 -j DROP执行完&#xff0c;立即生效 配套资料 1. 禁止指定 IP ipt…

为什么BDLocationListener没有被调用

百度地图定位bug 这个问题主要有两个因素 1、看这个key。有木有对 <meta-dataandroid:name"com.baidu.lbsapi.API_KEY"android:value"qn3ZT2xT7yDgbIgkaPooGpDdMjziASZj" /> 2、看这个服务有木有添加 <serviceandroid:name"com.baidu.lo…

前端学习(2706):重读vue电商网站26之JSON格式的配置文件

在项目根目录创建名为 .prettierrc 的文件&#xff0c;增加如下代码&#xff1a; Css {"semi": false,"singleQuote": true }semi设置 false去掉分号&#xff0c;singleQuote 设置 true使用单引号。 此外&#xff0c;还可以禁用 function 处空格报错&…

Android Splash闪屏页秒开 Activity白屏、Activity黑屏问题

本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 今天在处理项目中闪屏界面的时候&#xff0c;遇到程序第一次开启会出现白屏大约2秒左右&#xff0c;然后再执行闪屏&#xff0c;故找到该篇文章&#xff0c;问题解决&#xff1a; 本篇博客要剖析和解决的两个问题&…

前端学习(2707):重读vue电商网站27之通过axios请求拦截器添加 token

通过axios请求拦截器添加 token&#xff0c;保证拥有获取数据的权限。 原因是&#xff0c;后台那边除开登录的 api&#xff0c;其它都需要进行授权 。 因此&#xff0c;我们可以利用 axios 中interceptors属性&#xff0c;其中有一个成员 request&#xff0c;此时我们可以通过…

mac osx 下 浏览器 开启 java

工作环境mac osx 浏览器 chrome:63.0.3239.132 (Official Build) (64-bit)firefox: 57.0.4 (64 位)safari:Version 11.0.1 (13604.3.5) 堡垒机的部分设置&#xff0c;需在单独的web后台&#xff0c;该后台依赖java&#xff0c;和之前 超微 Supermicro 的 web 管理类似&#xff…

Android 使用控件自定义背景实例

实例1 <?xml version"1.0" encoding"UTF-8"?> <!-- 底部圆角 白色背景 灰色边框 长方体 --> <layer-list xmlns:tools"http://schemas.android.com/tools"xmlns:android"http://schemas.android.com/apk/res/android&quo…

mac mongodb bson 导入

1、官网下载对应工具 https://www.mongodb.com/try/download/bi-connector 2、将文件解压&#xff0c;放置到bin目录中。 3、运行命令进行数据恢复 mongorestore -d db_name 文件夹目录 mongorestore -d yangdb /Users/caowei/Downloads/yang-admin-main/db/yang-admin4、…

前端学习(2708):重读vue电商网站28之通过axios请求拦截器添加 token

通过axios请求拦截器添加 token&#xff0c;保证拥有获取数据的权限。 原因是&#xff0c;后台那边除开登录的 api&#xff0c;其它都需要进行授权 。 因此&#xff0c;我们可以利用 axios 中interceptors属性&#xff0c;其中有一个成员 request&#xff0c;此时我们可以通过…

ABAP表生成Java实体Bean

项目中需要将HR模块中的表数据同步到Java系统中&#xff0c;向外围系统提供分发与查询服务&#xff0c;涉及到的表有两百多张&#xff0c;字段好几千上万个&#xff0c;如果手工一张张这些ABAP表在Java系统数据库中创建一遍的话&#xff0c;工作量将非常大&#xff0c;而且容易…

vite打包分析插件rollup-plugin-visualizer

1、安装插件 pnpm install rollup-plugin-visualizer2、在vite.confg.ts引入插件并使用 引入 import { visualizer } from rollup-plugin-visualizer;使用 const plugins [vue(), vueSetupExtend(), vueJsx(), visualizer()]3、打包后&#xff0c;会产生一个stats.html文件…