Java利用TCP协议发送文件(三)--客户端设计
来源:互联网 发布:如何购买国外域名 编辑:程序博客网 时间:2024/05/17 03:44
由于项目的需要,需要在手机平台上面进行传输,但是,由于android平台的开发环境比较容易使用,而且免费,同时,因为在编写数据包的时候,已经在数据包中加入了发送数据包和接收数据包的函数,因此,考虑到开发投入的情况下,选择了使用Android平台。
由于在Android的应用大部分是使用Java进行开发的,而在Android中,并没有特殊的TCP的API,Android使用的TCP就是标准的Java的TCP的类,因此对于Android客户端来说,只需要将服务器版本的数据包代码中使用到TCP进行传输的代码,也就是Transfer.java进行简单的修改即可。
由于在Android的应用大部分是使用Java进行开发的,而在Android中,并没有特殊的TCP的API,Android使用的TCP就是标准的Java的TCP的类,因此对于Android客户端来说,只需要将服务器版本的数据包代码中使用到TCP进行传输的代码,也就是Transfer.java进行简单的修改即可。
具体的代码如下:
/** * */package edu.pkusz.sheng;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.net.Socket;/** * @author sheng * */public class Transfer{private static Socket ClientSocket = null;private static BufferedOutputStream SocketOutputStream = null;private static BufferedInputStream SocketInputStream = null;private static void CreateSocket(){try {ClientSocket = new Socket(CONSTANT.IP, CONSTANT.PORT);}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static void CreateSocketOutputStream(){if (ClientSocket == null){CreateSocket();}try {SocketOutputStream = new BufferedOutputStream(ClientSocket.getOutputStream());}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static void CreateSocketInputStream(){if (ClientSocket == null){CreateSocket();}try {SocketInputStream = new BufferedInputStream(ClientSocket.getInputStream());}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static boolean SendPackage(DataPackage PackageOfData){if (SocketOutputStream == null){CreateSocketOutputStream();}return PackageOfData.Send(SocketOutputStream);}public static boolean SendPackage(BufferedInputStream InputFile, PackageType Type, int LenOfData) throws IOException{final int LENOFCONTENT = BufferSize.BUFFERSIZE - BufferSize.PACKAGEHEADERSIZE;// The number of packages.int NumberOfPackages = LenOfData / LENOFCONTENT;if ((LenOfData % LENOFCONTENT) != 0){NumberOfPackages++;}DataPackage PackageOfData = new DataPackage(false);// set the type and the number of packages.PackageOfData.SetType(Type);PackageOfData.SetNumberOfPackages(NumberOfPackages);boolean result = false;byte[] TmpBuffer = new byte[LENOFCONTENT];int Len = 0;int IndexOfPackages = 1;while ((Len = InputFile.read(TmpBuffer)) != -1){PackageOfData.SetIndexOfPackages(IndexOfPackages);PackageOfData.SetSizeOfData(Len);// set contentPackageOfData.SetContent(TmpBuffer);// send dataresult = SendPackage(PackageOfData);IndexOfPackages++;}return result;}public static boolean SendString(PackageType Type, String InputString){if (InputString.length() > BufferSize.BUFFERSIZE){return false;}DataPackage PackageOfData = new DataPackage(false);// set the package headerPackageOfData.SetType(Type);PackageOfData.SetNumberOfPackages(1);PackageOfData.SetIndexOfPackages(1);PackageOfData.SetSizeOfData(InputString.length());// set the contentPackageOfData.SetContent(InputString.getBytes());return SendPackage(PackageOfData);}public static boolean SendUserName(String UserName){PackageType Type = PackageType.USERNAME;return SendString(Type, UserName);}public static boolean SendAuthorisztionRequest(){PackageType Type = PackageType.REQUESTAUTHORIZATION;String Request = new String("RequestAuthorization");return SendString(Type, Request);}public static boolean SendRequest(){PackageType Type = PackageType.REQUESTRESULT;String Request = new String("Request");return SendString(Type, Request);}public static boolean SendTextRequest(){PackageType Type = PackageType.REQUESTTEXT;String Request = new String("TextRequest");return SendString(Type, Request);}public static boolean SendClosedRequest(){PackageType Type = PackageType.CLOSED;String Request = new String("Closed");boolean result = SendString(Type, Request);try {result = Close();}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}public static boolean SendFile(String FileName) throws IOException{File RawFile = null;BufferedInputStream InputFile = null;try {RawFile = new File(FileName);InputFile = new BufferedInputStream(new FileInputStream(RawFile));}catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}int Len = (int) RawFile.length();PackageType Type = PackageType.FILEDATA;boolean result = false;result = SendPackage(InputFile, Type, Len);InputFile.close();return result;}public static boolean Close() throws IOException{if (SocketInputStream != null){SocketInputStream.close();}if (SocketOutputStream != null){SocketOutputStream.close();}if (ClientSocket != null){ClientSocket.close();}return true;}public static String ReceiveString(PackageType Type){DataPackage Data = new DataPackage(true);boolean run = true;if (SocketInputStream == null){CreateSocketInputStream();}while (run){int Len = 0;if ((Len = Data.Receive(SocketInputStream)) != -1){if (Data.GetType() == Type){run = false;}}}return new String(Data.Content, 0, Data.SizeOfData);}public static String ReceiveText(){PackageType Type = PackageType.REPLAYTEXT;return ReceiveString(Type);}public static String ReceiveUserName(){PackageType Type = PackageType.USERNAME;return ReceiveString(Type);}public static String ReceiveAuthorizen(){PackageType Type = PackageType.REPLAYAUTHORIZATION;return ReceiveString(Type);}public static String ReceiveResult(){PackageType Type = PackageType.REPLAYRESULT;return ReceiveString(Type);}}
0 0
- Java利用TCP协议发送文件(三)--客户端设计
- Java利用TCP协议发送文件(二)--数据包设计
- java 利用TCP协议从客户端向服务器端发送文件.(网络编程)
- Java利用TCP协议发送文件(一)--服务器端
- Java利用TCP协议发送文件(四)--完整源代码
- [Java]利用Scoket发送各类文件-实例代码-长连接-极简代码-TCP协议
- C# 利用TCP/IP协议发送图片文件,并显示
- windows tcp 客户端 发送文件
- TCP编程例三:从客户端发送文件给服务器端,服务器端保存到本地,并返回“发送成功”给客户端。
- 服务端利用多线程TCP同时接受多个客户端发送文件
- 利用TCP从客户端往服务器端发送一个文件过程中发生的问题
- TCP协议发送文件小案例
- java 网络 TCP客户端 发送数据 Socket
- tcp协议服务器和客户端相互发送数据
- 使用TCP协议实现客户端向服务器发送图片
- JAVA TCP协议的发送接收
- 利用UDP协议发送与接收文件
- 【Java网络】STMP邮件协议 发送客户端
- C 语言实现多态的原理:函数指针
- Spring利用propertyConfigurer类 读取.property数据库配置文件
- 关于java对象序列化您不知道的5件事
- Viewpager循环加载demo
- 使用jQuery 模拟鼠标点击a标签事件 实现定位
- Java利用TCP协议发送文件(三)--客户端设计
- GCD使用_以后自己用
- 2014年百度之星程序设计大赛 - 资格赛 第四题 Labyrinth
- LeetCode: Valid Parentheses [020]
- Sql Server 2008数据库的导出与备份
- A Quick Guide to Sublime Text
- could not determine type for java.util.set
- 外企的福利真比国企差吗?
- jQuery图片轮播(焦点图)插件