(Android)JavaSocket编程,文件上传到服务器,客户端Android,服务器端J2SE

article/2025/10/15 1:53:23



SD卡中有encrypt.png文件



在E盘可以看到,从模拟器SD卡中发送来的文件



服务器端代码,我这里是使用CMD命令演示的。服务端等待客户端连接,然后接收客户端的数据。包括文件名,大小,和文件数据。

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class FileServer {private int port = 8821;private ServerSocket ss;private Socket socket;/** 数据输入流,读取来自网络的数据流 **/private DataInputStream dis;/** 数据输出流,将来自网络的数据流写入文件 **/private DataOutputStream dos;private String savePath = "E:\\";public void startServer() {// 已经传输的文件大小int passedlength = 0;// 文件总大小long length = 0;// 缓存大小int bufferSize = 8192;// 缓存byte[] buf = new byte[bufferSize];try {ss = new ServerSocket(port);socket = ss.accept();dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));} catch (IOException e) {e.printStackTrace();}try {// 将文件名字读取进来savePath += dis.readUTF();// 文件的长度读取进来(实际只是为了显示进度)length = dis.readLong();} catch (IOException e) {e.printStackTrace();}try {dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(savePath)));} catch (FileNotFoundException e) {e.printStackTrace();}while (true) {int read = 0;if (dis != null) {try {read = dis.read(buf);} catch (IOException e) {e.printStackTrace();}}passedlength += read;if (read == -1) {break;}// 下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比System.out.println("文件接收了" + (passedlength * 100 / length) + "%\n");try {dos.write(buf, 0, read);} catch (IOException e) {e.printStackTrace();}}if (dos != null) {try {dos.close();} catch (IOException e) {e.printStackTrace();}dos = null;}if (dis != null) {try {dis.close();} catch (IOException e) {e.printStackTrace();}dis = null;}if (socket != null) {try {socket.close();} catch (IOException e) {e.printStackTrace();}socket = null;}if (ss != null) {try {ss.close();} catch (IOException e) {e.printStackTrace();}ss = null;}System.out.println("接收完成,文件存为" + savePath + "\n");}public static void main(String[] args) {FileServer fileServer = new FileServer();fileServer.startServer();}
}

Android端代码(客户端)
还是要记住在Manifest中添加网络访问权限

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:textStyle="bold"android:gravity="center"android:text="文件上传测试" /><Buttonandroid:id="@+id/myButton"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="开始上传" /></LinearLayout>

文件操作类,主要是使用了里面的获取SD路径的函数

package com.zeph.android.fileclient;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;import android.content.Context;
import android.os.Environment;public class FileHelper {private Context context;/** SD卡是否存在 **/private boolean hasSD = false;/** SD卡的路径 **/private String SDPATH;/** 当前程序包的路径 **/private String FILESPATH;public FileHelper(Context context) {this.context = context;hasSD = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);SDPATH = Environment.getExternalStorageDirectory().getPath();FILESPATH = this.context.getFilesDir().getPath();}/*** 在SD卡上创建文件* * @throws IOException*/public File createSDFile(String fileName) throws IOException {File file = new File(SDPATH + "//" + fileName);if (!file.exists()) {file.createNewFile();}return file;}/*** 删除SD卡上的文件* * @param fileName*/public boolean deleteSDFile(String fileName) {File file = new File(SDPATH + "//" + fileName);if (file == null || !file.exists() || file.isDirectory())return false;return file.delete();}/*** 读取SD卡中文本文件* * @param fileName* @return*/public String readSDFile(String fileName) {StringBuffer sb = new StringBuffer();File file = new File(SDPATH + "//" + fileName);try {FileInputStream fis = new FileInputStream(file);int c;while ((c = fis.read()) != -1) {sb.append((char) c);}fis.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return sb.toString();}public String getFILESPATH() {return FILESPATH;}public String getSDPATH() {return SDPATH;}public boolean hasSD() {return hasSD;}
}

Activity类,里面的startClient函数完成文件传输到服务器    注意代码里面IP地址填写你自己的。

package com.zeph.android.fileclient;import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class FileClientActivity extends Activity {private Socket socket;// 这里填写你的IP地址private String ip = "192.168.0.1";private int port = 8821;private DataInputStream dis;private DataOutputStream dos;private Button myButton;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);myButton = (Button) findViewById(R.id.myButton);myButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {new Thread() {public void run() {startClient("encrypt.png");}}.start();}});}public void startClient(String fileName) {FileHelper helper = new FileHelper(getApplicationContext());String filePath = helper.getSDPATH() + "//" + fileName;File file = new File(filePath);try {socket = new Socket(ip, port);dis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));dos = new DataOutputStream(socket.getOutputStream());} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}try {dos.writeUTF(file.getName());dos.flush();dos.writeLong((long) file.length());dos.flush();} catch (IOException e) {e.printStackTrace();}int bufferSize = 8192;byte[] buf = new byte[bufferSize];while (true) {int read = 0;if (dis != null) {try {read = dis.read(buf);} catch (IOException e) {e.printStackTrace();}}if (read == -1) {break;}try {dos.write(buf, 0, read);dos.flush();} catch (IOException e) {e.printStackTrace();}}try {dis.close();dos.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}


http://chatgpt.dhexx.cn/article/f519SZ4Z.shtml

相关文章

Java Socket实现文件传输

阿里云双11服务器优惠&#xff08;年度最佳优惠&#xff09;&#xff1a; A&#xff1a;1核2GB 1M 服务器年69元 B&#xff1a;1核2GB 1M 服务器三年180元 C&#xff1a;2核4GB 1~10M 服务器三年567元&#xff08;强烈推荐&#xff09; D&#xff1a;4核8GB 1~10M 服务器三年10…

Java Tcp(Socket、ServerSocket)

TCP所提供服务的主要特点&#xff1a; 面向连接的传输&#xff1b;端到端的通信&#xff1b;高可靠性&#xff0c;确保传输数据的正确性&#xff0c;不出现丢失或乱序&#xff1b;全双工方式传输&#xff1b;采用字节流方式&#xff0c;即以字节为单位传输字节序列&#xff1b…

【Socket】Java Socket通信(一)

前段时间在网上学习了Java Socket的应用编程。 端口 用于区分不同应用程序端口号范围065535&#xff0c;其中01023为系统所保留IP地址和端口号组成了所谓的Socket&#xff0c;Socket是网络上运行的程序之间双向通信链路的终结点&#xff0c;是TCP和UDP的基础http&#xff1a;…

java socket编程总结

java socket编程总结 说明一、TCP/IP协议模型二、获取IP相关信息InetAddressInetSocketAddressURL 三、TCP编程四、UDP编程五、关于TCP与UDP 说明 更新时间&#xff1a;2020/12/01 17:17&#xff0c;更新完基本内容 java的socket编程做一个总结&#xff0c;主要是面向Tcp和Ud…

Java Socket网络编程,你要的实验,我都有

JAVA Socket编程 目录 JAVA Socket编程多人聊天室客户端源代码服务器端源代码运行展示 邮件发送客户端运行展示 在线云笔记客户端窗口服务器端代码运行展示 多人聊天室 客户端源代码 import java.awt.BorderLayout; import java.awt.HeadlessException; import java.awt.event…

【Java高级】初探socket编程 ——JavaSocket连接与简单通信

新学期生活开始一段时间了&#xff0c;要继续学习一些新的技术&#xff08;这里指socket /doge&#xff09;&#xff0c;目标是尝试完成一个在线即时聊天的小程序&#xff08;尽量不咕&#xff09;。会更新一系列socket编程的技术文章&#xff0c;欢迎关注交流~ 那么千里之行&…

Java--Socket通信(双向,有界面)

服务端&#xff1a; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr…

JAVA 网络编程 Socket

网络&#xff1a;相互连接的计算机&#xff0c;带来的好处有共享资源&#xff0c;交换数据 IP地址&#xff1a;定位计算机地址 通常由网络地址主机地址组合 查看本机IP地址&#xff1a;电脑左下角输入CMD&#xff0c;回车在CMD界面输入ipconfig 127.0.0.1 测试本机网络配置 …

初识Java Socket编程

Java最初是作为网络编程语言出现的&#xff0c;其对网络提供了高度的支持&#xff0c;使得客户端和服务器的沟通变成了现实&#xff0c;而在网络编程中&#xff0c;使用最多的就是Socket。像大家熟悉的QQ、MSN都使用了Socket相关的技术。下面就让我们一起揭开Socket的神秘面纱。…

Java socket详解,看这一篇就够了

刚给大家讲解Java socket通信后&#xff0c;好多童鞋私信我&#xff0c;有好多地方不理解&#xff0c;看不明白。特抽时间整理一下&#xff0c;详细讲述Java socket通信原理和实现案例。整个过程楼主都是通过先简单明了的示例让大家了解整个基本原理&#xff0c;后慢慢接近生产…

递归下降文法C语言实验报告,递归下降分析法的简单例子的c语言实现

我们举的简单例子是 G[s]: S → a | ∧ | (T) T→T, S | S 转化为LL1文法 S →a |∧| (T) T →ST T→,ST| ε c语言代码实现 #include char scaner(char*input,int* p); void S(char*input,int* p); void T(char*input,int* p); void T1(char*input,int* p); void error(); int…

C++:编译实验之递归下降分析器

一、实验目的 1.加深对递归下降分析法一种自顶向下的语法分析方法的理解。 2.根据文法的产生式规则消除左递归&#xff0c;提取公共左因子构造出相应的递归下降分析器。 二、实验内容 根据课堂讲授的形式化算法&#xff0c;编制程序实现递归下降分析器&#xff0c;能对常见…

递归下降分析程序的设计和实现

递归下降分析程序的设计和实现 一、实验的目的和要求 1、了解语法分析的主要任务。 2、实现基本的递归下降分析器&#xff0c;能够分析任意的符号串是否为该文法所定义的合法算术表达式。二、实验环境 Windows7 Dev-C三、实验准备 先将递归下降分析程序的生成认真的学习一…

利用递归下降分析方法完成语法分析

一、 程序设计题目与说明 利用递归下降分析方法完成语法分析。 递归下降分析法是一种自顶向下的分析方法&#xff0c;文法的每个非终结符对应一个递归过程&#xff08;函数&#xff09;。分析过程就是从文法开始符出发执行一组递归过程&#xff08;函数&#xff09;&#xff…

编译原理 --- 递归下降分析器

第一部分 --- 构造递归下降分析器 1.在上面这个例子中则是子程序序A先调用子程序B&#xff0c;本程序结束完调用之后再返回来继续调用下一个符号 如果下一个符号是终结符的话那就直接进行匹配&#xff0c;不进行调用&#xff0c;匹配完后继续调用下一个符号 如果不是的话则调…

递归下降分析法实现强化计算器

一. 实验概述 1.使用bison 和 flex 实现扩展版计算器 该计算器支持实型的两种表达,分别是小数和科学计数法. 该计算器支持 加, 减, 乘 除 四种运算 和括号()运算符. 该计算器支持整形,实型混合运算 2.通过递归下降分析法自行编写的语法分析和使用flex进行的词法分析的计算器.…

编译原理研究性学习专题 2——递归下降语法分析设计原理与实现

1 实验内容 完成以下描述赋值语句的 LL(1)文法的递归下降分析程序 G[S]: S→ VE E→ TE’ E’→ ATE’ | e T→ FT’ T’→ MFT’ | E F→ (E) | i A→ | - M→ * | / V→ i 设计说明&#xff1a;终结符号 i 为用户定义的简单变量&#xff0c;即标识符的定义。 2 实验要求 …

Python技法之简单递归下降Parser的实现方法

文章目录 一. 算术运算表达式求值二. 生成表达式树三、左递归和运算符优先级陷阱四. 相关包 一. 算术运算表达式求值 对于简单的算术运算表达式&#xff0c;假定我们已经用分词技术将其转化为输入的tokens流&#xff0c;如NUMNUM*NUM。 在此基础上&#xff0c;我们定义BNF规则…

编译实验 . 递归下降分析器

实验目的&#xff1a; 1.1掌握语法分析方法。 1.2掌握使用算符优先分析法。 1.3完成语法分析程序的设计和实现。 1.4程序能完成对指定语言的语法分析。 2. 递归下降分析器 在不含左递归和每个非终结符的所有候选终结首符集都两两不相交的条件下&#xff0c;我们就可能构造…

用c语言编译递归下降翻译器,Java实现C语言语义分析(递归下降)

说起这次的语义分析&#xff0c;不得不说的是我的重大的改变。上一次的语法分析是利用了预测分析法来实现的&#xff0c;经过多方考证&#xff0c;发现用预测分析法的语法分析器基础来实现语义分析的困难重重&#xff0c;例如在语法指导翻译的时候那个栈的变化和各种属性的传递…