【移动应用开发技术】android Socket实现简单聊天功能以及文件传输_第1页
【移动应用开发技术】android Socket实现简单聊天功能以及文件传输_第2页
【移动应用开发技术】android Socket实现简单聊天功能以及文件传输_第3页
【移动应用开发技术】android Socket实现简单聊天功能以及文件传输_第4页
【移动应用开发技术】android Socket实现简单聊天功能以及文件传输_第5页
免费预览已结束,剩余2页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】androidSocket实现简单聊天功能以及文件传输

干程序是一件枯燥重复的事,每当感到内心浮躁的时候,我就会找小说来看。我从小就喜爱看武侠小说,一直有着武侠梦。从金庸,古龙,梁羽生系列到凤歌(昆仑),孙晓(英雄志)以及萧鼎的(诛仙)让我领略着不一样的江湖。如果你有好看的武侠系列小说,给我留言哦。题外话就扯这么多了,接着还是上技术。看看今天实现的功能效果图:可以这里使用多台手机进行通讯,我采用的服务器发送消息。是不是只有发送消息,有些显得太单调了。好,在发送消息的基础上增加文件传输。后期会增加视频,音频的传输,增加表情包。那一起来看看图文消息的效果图,带领大家一起来实现通讯的简易聊天功能。需要解决的难点:如何判断socket接收的数据是字符串还是流?

如果你已是一名老司机,还请留言给出宝贵意见。带着这个疑问我们接着往下看。Socket概述Socket我们称之为"套接字",用于消息通知系统(如:激光推送),时事通讯系统(如:环信)等等。用于描述IP地址和端口,是一个通信链的句柄。网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket,一个Socket由一个IP地址和一个端口号唯一确定(如:ServerSocket)。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。Socket是TCP/IP协议的一个十分流行的编程界面,但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。包下有两个类:Socket和ServerSocket,基于TCP协议。本文针对Socket和ServerSocket作主要讲解。socket连接建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。步骤如下:JDKSocket在包下有两个类:Socket和ServerSocket。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。接着了解下Socket和ServerSocket的构造方法。SocketSocket的构造方法:参数含义:注意:我们在选取端口号的时候需要特别注意,每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23。本文选取的端口号为30003Socket的几个重要方法:对流的操作,操作完记得处理和关闭。以及对流异常的处理。ServerSocketServerSocket的构造方法:接着我们一起来看看案例。发送和接收消息首先来实现一个简单的案例,服务器端一直监听某个端口,等待客户端连接请求。客户端根据IP地址和端口号连接服务器端,接着客服端通过控制台向服务端发送消息,服务端接收到消息并且展示出来。下面来看看具体实现的步骤:ClientSocket客服端:Socket两个参数分别是IP地址和端口号,可以通过以下代码获取IP地址:注意:关闭多余的网络适配,只保留当前的网络连接。关闭防火墙,安全软件。不然可能导致连接不上。ServerSocket服务端:服务端和客服端的端口号必须保持一致。下面我们运行两个java程序看看效果:可能有些童鞋还不知道,怎么在AndroidStudio下面运行java程序,请看下面截图:传输文件Socket只能通过流去读取消息,传输文件需要解决文章开始提出的问题,如何判断socket接收的数据是字符串还是流?定义协议为了保证接收到的数据类型统一(数据是字符串还是流),需要定义协议。定义协议的方式有很多种:我这里采用的自定义协议,原理跟前面两种类似。我传输的是JSON数据,根据字段标识传输的是字符串还是流,接收者根据标识去解析数据即可。协议的实体类(Transmission):根据字段transmissionType去标识传输(序列化)或接收(反序列化)的类型。传输的过程中始终都是以JSON的格式存在的。传输文件时需要把流转换成字符串(方式很多种我用的是Base64加密与解密)。客户端(ClientThread)客户端发送文件的代码如下:文章结尾处我会附上源码。把字节流转换成字符串传输Base64Utils.encode(bytes),接收方把字符串解析成字节流并写入文件。注意:在Android程序中运行,记得添加网络文件读写的权限。服务端(ServerThread)服务端接收文件的代码如下:服务端接收到文件,并存储到了d盘。注

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论