Android之发送接收服务器消息

一:什么是Socket    

    它实际上是网络通信的一种接口,基于不同的协议,有各种不同的Socket,比如有基于TCP协议的Socket和基于UDP协议的Socket以及基于蓝牙协议的Socket,Android中使用的是Java的Socket模型。

    Socket在计算机行业通常称为”套接字“,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过“套接字”向网络发送请求或者应答网络请求。这是一个比较抽象的概念。计算机是拥有端口的,每一个端口都可以有一个应用程序来进行通讯的使用,比如:80端口是HTTP协议所使用的端口,21端口是FTP协议所使用的端口,端口是计算机和外界通讯的接口,这些接口都是逻辑的接口,端口号取值的范围是零到256乘以256减1,1024以下的端口都是操作系统使用的保留端口,以上的端口我们可以自由的来使用,不要和其他应用程序的端口冲突。

    应用程序可以通过“套接字”向网络发送请求或者应答网络的请求,这时候就把Socket分成了两部分,一部分是服务器端的Socket,这个Socket主要用来接收来自网络的请求,它一直监听在某一个端口上。一部分是客户端的Socket,这个Socket主要用来向网络发送数据。

二:Socket通讯模型

  

    -UDP协议和TCP协议

    UDP协议和TCP协议是互联网使用最广的两种协议都是基于IP的协议。第一个区别是UDP协议是一个不太靠谱的协议,UDP协议把数据都打成数据包,数据包上自带通讯地址,也就是说我要把这个数据包发送到网络上的哪一个地址,通过网络把这个数据包发送出去,至于这个数据包是否发送到目的地,是否服务器端接收到了这个数据包,这个协议并不保证,就像中国的邮政,你是把信寄出去了,但是邮政系统不保证对方能收到你寄送的信。TCP发送数据的时候要求接收方接收到数据之后给一个回应,也就是你是否收到了,TCP可靠一些,当我们发送一些比较重要的数据的时候一般都使用TCP协议。另外一个区别是UDP协议发送的一个数据包它的容量是有限的,而TCP协议则没有这样一个限制。并不是说UDP协议一定就不如TCP协议,在不同的领域有不同是使用,UDP协议好处是速度相对快些。TCP协议相对慢些。

    -Socket通讯流程

    应用程序通过“套接字”也就是Socket可以选择这两种协议当中的一种,你可以选择用UDP发送数据,也可以选择用TCP发送数据,数据发送出去通过“通信信道”也就是IP的基础网络,来到服务器端(接收端),就可以接收到数据了。发送数据的时候用UDP协议,接收的时候也要用UDP协议,发送数据的时候用TCP协议,接收的时候也要用TCP协议,在发送的时候指定接收端的IP地址和端口号就可以了,究竟数据包或数据是如何发送的,框架已经帮我们封装好了,我们不去关心它了。

               一个客户端要发起一次通信,首先必须知道运行服务器端的主机IP地址和通信端口。然后由网络基础设施利用目标地址,将客户端发送的信息传递到正确的主机上,在Java中,地址可以由字符串来定义,字符串可以使数字型的地址(比如172.16.21.202),也可以是主机名,端口为6610。下面实现一个例子,手机为客户端,PC机(Windows系统)为服务器,手机和服务器约定一个端口号6610。手机通过socket向服务器发送消息,服务器监听约定的端口号6610,接收来自客户端的socket套接字,同时客户端显示已发送的消息。服务器也可以给手机客户端发送消息,手机客户端收到消息并显示出来。从而实现从手机端与服务器互相通信。

本文主要基于TCP协议来进行数据的发送,通常用于发送文件采用这种方式。

TCP协议通讯模型

    1:工作流程

    

    首先有两部分客户端和服务器端,客户端需要Socket这个类的对象,而服务器端需要ServerSocket这个类的对象,由客户端Socket发送一个请求,服务器端的ServerSocket在计算机的某一个端口号上进行监听,监听客户端发送的请求之后,那么客户端和服务器端的一个通讯通道就建立起来了,这时候呢既可以从客户端向服务器端发送数据,服务器端也可以给客户端相应

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
很抱歉,由于您的问题涉及技术开发,我可以回答。以下是Android上实现MQTT协议的基本步骤以及示例代码: 1. 首先,你需要添加MQTT的依赖库。例如,在build.gradle中添加以下代码: ``` implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0' ``` 2. 然后,在你的Android应用程序中创建一个MqttAndroidClient对象。例如,在onCreate方法中添加以下代码: ``` MqttAndroidClient mqttAndroidClient = new MqttAndroidClient(context, brokerUrl, clientId); ``` 其中,context是你的应用程序上下文,brokerUrl是MQTT代理服务器的URL,clientId是你想要MqttClient使用的标识符。 3. 接下来,你需要使用MqttConnectOptions对象来配置连接选项。例如,你可以使用以下代码创建一个MqttConnectOptions对象并设置选项: ``` MqttConnectOptions mqttConnectOptions = new MqttConnectOptions(); mqttConnectOptions.setCleanSession(true); mqttConnectOptions.setAutomaticReconnect(true); mqttConnectOptions.setWill(mqttTopic, lastWill.getBytes(), qos, true); ``` 在这里,cleanSession选项设置为true以创建一个新的会话,在MqttClient断开连接时,将自动重新连接,最后遗嘱消息将在客户端掉线时发送。 4. 接下来,使用mqttAndroidClient.connect()方法尝试连接到MQTT代理服务器。例如,在onCreate方法中添加以下代码: ``` mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { // 连接成功 } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { // 连接失败 } }); ``` 在这里,当连接成功时,调用onSuccess方法;当连接失败时,调用onFailure方法。 5. 连接成功后,你可以使用MqttAndroidClient对象来发布和订阅MQTT主题。例如,使用mqttAndroidClient.subscribe()方法订阅主题,在onSuccess方法中添加以下代码: ``` mqttAndroidClient.subscribe(topicName, qos, null, new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { // 订阅成功 } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { // 订阅失败 } }); ``` 在这里,当订阅成功时,调用onSuccess方法;当订阅失败时,调用onFailure方法。 6. 发布主题时,使用mqttAndroidClient.publish()方法。例如,在onSuccess方法中,添加以下代码向主题发布消息: ``` mqttAndroidClient.publish(topicName, payload.getBytes(), qos, retained, null, new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { // 发布成功 } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { // 发布失败 } }); ``` 在这里,payload是需要发送消息内容,retained表示消息是否持久化存储。 7. 最后,在退出应用程序或不需要MQTT连接时使用mqttAndroidClient.disconnect()方法断开连接。例如,在onDestroy方法中,添加以下代码: ``` mqttAndroidClient.disconnect(); ``` 这就是Android上实现MQTT协议的基本步骤以及示例代码。注意,这里只是提供了基本的代码示例,你需要按照自己的需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值