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…

electron vue vite 配置安装

需求&#xff1a;第一次安装&#xff0c;无脑npm install后来发现&#xff0c;跑不了 1、根目录新建.npmrc文件、内容如下 electron_mirrorhttp://cdn.npm.taobao.org/dist/electron/2、在打包过程中&#xff0c;各种安装不顺利 打包时下载electron-v.xxxx.zip文件失败 解决办…

前端学习(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

iptables命令整理,禁止固定端口(例5500)的访问

说明命令iptables -t 表名 -L查看对应表中的所有规则iptables -t 表名 -L 链名查看表的指定链中的规则iptables -t 表名 -v -L查看对应表中的所有规则 -v显示跟详细的信息iptables -t 表名 -n -L-n 表示不解析IP地址iptables --line-numbers -t 表名 -L–line-numbers 显示规则…

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

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

如何在网页上下载优酷、土豆上的视频

在browser上用f12的方法也可以下载&#xff0c;但是有的视频不能下载&#xff0c;可能是没有下载权限&#xff0c;属于付费视频吧&#xff0c;具体原因不太清楚。转载于:https://www.cnblogs.com/viplued/p/8336116.html

AndroidStudio导入项目一直卡在Building gradle project info最快速解决方案

转自&#xff1a;http://www.cnblogs.com/baron89/p/4843113.html 最近在网上找一些别人的demo导入到自己AS中遇到导入项目一直卡在Building gradle project info&#xff0c;在网上查了资料发现实际上是因为导入的这个项目使用的gradle与当前已经拥有的gradle版本不一致&…

Android 常用设计模式——观察者模式,单例模式,Builder模式,原型模式,命令模式

设计模式&#xff08;Design pattern&#xff09;是一套被反复使用的代码设计经验的总结。使用设计模式的目的是为了可重用代码让代码更容易被他人理解 设计模式的运用&#xff0c;有助于代码的维护与拓展。任何模式的出现&#xff0c;都是为了解决一些特定的场景的耦合问题&a…

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 …

Unable to delete directory: D:\Downloads\githubdownfive\tianxmyapp\library\

Clean项目的时候报错。这个问题简单 关掉之前的项目再Clean就可以了

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

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

JS 内置对象

对象&#xff0c;是任何一个开发者都无法绕开和逃避的话题&#xff0c;她似乎有些深不可测&#xff0c;但如此伟大和巧妙的存在&#xff0c;一定值得你去摸索、发现、征服。 我们都知道&#xff0c;JavaScript有3大对象&#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与服务器通信之socket通信

最近接触的一个案例需要用到通讯方式,首先想到的是socket通讯,–代码比较简单;然后就去网上查代码,找了很久发现一个大牛写的很详细>>> 跳转 一&#xff1a;Android&#xff1a;接收以及发送消息 1&#xff0c;首先实例化socket 即 socket new Socket(服务器IP, 服务…