Socket通信及文件操作

2023-11-07

java Socket通信及文件操作

编译软件:Eclipse

一、客户端

package com;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class socketclient {
    private static FileInputStream fis;
    private static DataOutputStream dos;
    
    //生成文件路径
    private static String path = "D:/data/";    
    //文件路径+名称
    private static String filenameTemp;
	public static void main(String[] args) {
        try {
            /** 创建Socket*/
            // 创建一个流套接字并将其连接到指定 IP 地址的指定端口号(本处是本机)
            Socket client = new Socket("xxx.xxx.xxx.xxx", 12345);
            // 60s超时
            client.setSoTimeout(60000);
            /** 发送客户端准备传输的信息 */
            // 由Socket对象得到输出流,并构造PrintWriter对象
            PrintWriter printWriter = new PrintWriter(client.getOutputStream(), true);
            // 将输入读入的字符串输出到Server
            BufferedReader sysBuff = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("请输入文件名: ");
            String namefile =sysBuff.readLine();
            printWriter.println(namefile);
            // 刷新输出流,使Server马上收到该字符串
            printWriter.flush();
           
            /* 用于获取服务端传输来的信息 */
            /*
            	//由Socket对象得到输入流,并构造相应的BufferedReader对象
            	BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            	//读入一字符串
            	String Serverdata = bufferedReader.readLine();
            	System.out.println("服务器回传数据 : " + Serverdata);
            */
            //创建文件
            String filecontent="帅哥!";//文件内容
            /*
            //从控制台输入所要文本创建的内容
            String filecontent =sysBuff.readLine();
            */
            filenameTemp = path+namefile+".txt";//文件路径+名称+文件类型
            File file =new File(filenameTemp);
            try {
                //如果文件不存在,则创建新的文件
                if(!file.exists()){
                    file.createNewFile();
                    System.out.println("File created successfully");
                    //创建文件成功后,写入内容到文件里
                    FileWriter wr= new FileWriter(file);
                    wr.write(filecontent);
                    wr.flush();
                    wr.close();
                    System.out.println("File written successfully");
                }else {
                	System.out.println("File already exists");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            //向服务端传送文件
            //File file = new File("D:/data/lkm.txt");//直接传输文件夹里的文件
            fis = new FileInputStream(file);
            dos = new DataOutputStream(client.getOutputStream());
            
            //文件名和长度
            dos.writeUTF(file.getName());
            dos.flush();
            dos.writeLong(file.length());
            dos.flush();
            
            //传输文件
            byte[] sendBytes = new byte[1024];
            int length = 0;
            while((length = fis.read(sendBytes, 0, sendBytes.length)) > 0){
                dos.write(sendBytes, 0, length);
                System.out.println("File send sucess");
                dos.flush();
            }
            
            /** 关闭Socket*/
            fis.close();
            dos.close();
            printWriter.close();
            client.close();
        } catch (Exception e) {
            System.out.println("Exception:" + e);
        }
    }
}


二、服务器

package com;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;


public class socketserver {

	private static DataInputStream dis;
	private static FileOutputStream fos;
	
	public static void main(String[] args) throws IOException {
        //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
        @SuppressWarnings("resource")
		ServerSocket serverSocket = new ServerSocket(12345);
        InetAddress address = InetAddress.getLocalHost();
        String ip = address.getHostAddress();
        Socket client = null;
        //2.调用accept()等待客户端连接
        System.out.println("~~~服务端已就绪,等待客户端接入~,服务端ip地址: " + ip);
        client = serverSocket.accept();
        //3.连接后获取输入流,读取客户端信息
        InputStream is=null;
        InputStreamReader isr=null;
        BufferedReader br=null;
        is = client.getInputStream();     //获取输入流
        isr = new InputStreamReader(is,"UTF-8");
        br = new BufferedReader(isr);
        String info=null;
        while((info=br.readLine())!=null){//循环读取客户端的信息 
        	System.out.println("接受数据:"+info);
    
        	//接受客服端发来的文件
             dis = new DataInputStream(client.getInputStream());
             //文件名和长度
             String fileName = dis.readUTF();
             long fileLength = dis.readLong();
             //文件存储路径
             fos = new FileOutputStream(new File("D:/data/lk/" + fileName));
             
             byte[] sendBytes = new byte[1024];
             int transLen = 0;
             System.out.println("----开始接收文件<" + fileName + ">,文件大小为<" + fileLength + "Byte>----");
             while(true){
                 int read = 0;
                 read = dis.read(sendBytes);
                 if(read == -1)
                     break;
                 transLen += read;
                 System.out.println("接收文件进度" + 100 * transLen/fileLength + "%...");
                 fos.write(sendBytes, 0, read);
                 fos.flush();
             }
             System.out.println("----接收文件<" + fileName + ">成功-------");
             dis.close();
             fos.close();
        }
        serverSocket.close();          
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Socket通信及文件操作 的相关文章

随机推荐

  • 计算机网络八和ctf做题七

    计算机网络学习了一段时间 因为里面有很多要记住的东西 而且还有很多协议有的还比较抽象 所以学着学着发现把那些协议都搞混了 所以这篇文章将要讲一些重要协议 点对点协议 点对点协议 点对点协议简称PPP协议 工作在数据链路层 设计目的主要是用来
  • linux下查看磁盘空间

    突然系统不能使用了 可以看一下是不是磁盘占满 了 首先登录到服务器 我的是mac 直接登录 使用ssh登录ssh t root 104 224 166 36 p27988 windows系统也可以使用 xshell来登录 命令行 df df
  • Debian下安装中文包和输入法【解决无法显示中文问题】

    以前一直用的都是ubuntu 输入法之类的点点鼠标就 了 最近需要使用debian了 安装了一个桌面版 vim写代码感觉有点恶心 安装的时候全部选择英文 运行起来发现竟然无法显示中文 输入法也没找到在哪里设置 我是在虚拟机下安装的 可能会有
  • ITX-RK3588J在Ubuntu22.04上进行SDK编译与烧写

    一 SDK下载 在Window上下载好最新的SDK 并把他放拉到虚拟机里的Ubuntu22 04上 二 搭建编译环境 Firefly维基教程上 需要安装编译环境 直接使用 sudo apt get install 软件名 安装全部软件 su
  • X2000 Linux PWM

    一 硬件设计 PC04 PWM4 二 通过shell开启PWM 配置参数 cmd pwm config pc04 freq 1000 max level 100 active level 1 accuracy priority freq 启
  • Docker容器中启动Arthas异常

    使用Docker容器部署spring boot项目 Dockerfile文件内容如下 FROM openjdk 8 jre alpine 第一步将apk源替换为国内阿里源 没有第一步将下载难产 RUN echo e https mirror
  • 117.Django-缓存redis

    1 概述 动态网站的基本权衡是 它们是动态的 每次用户请求页面时 Web服务器都会进行各种计算 从数据库查询到模板呈现再到业务逻辑 以创建站点访问者看到的页面 从处理开销的角度来看 这比标准的文件读取文件系统服务器要耗时多了 对于大多数We
  • 【CS229 lecture19】微分动态规划

    首先声明一下 这节课基本没听懂 但是还是把课程笔记写下 lecture19 微分动态规划 继续强化学习算法的讨论 Agenda 课程中段我曾讲过调试learning algorithm 今天再来将强化学习的部分 The motivating
  • 蓝桥杯 双向排列(Java)

    这题我看了两个博主的文章可算把它看懂了 链接如下 蓝桥杯 I 双向排序 Jozky86的博客 CSDN博客 蓝桥杯双向排序 蓝桥杯2021年第十二届省赛 双向排序 zy98zy998的博客 CSDN博客 蓝桥杯双向排序 我的代码如下 imp
  • 一句话说明白IRQL

    Windows操作系统运行的处理器架构中 硬件产生信号发给可编程中断控制器 中断控制器发送中断请求 IRQ 及相应的优先级给CPU CPU设置一个掩码 mask 屏蔽低优先级的其他中断请求到挂起状态 pending state 直到CPU释
  • 两台windows电脑之间通信

    一台做客户端 一台做服务端 服务端 import os import socket import time from test pip import pip test def server socket while True ip port
  • 微信小程序农历阳历日期选择器选中日期同时获取对应农/阳历日期 这个demo问题的修改

    修改以下三个文件完成BUG的修复 selectdata js文件中将农历转阳历的代码修改成 以下是原selectdata js中的代码 搜索 calendarConverter lunar2solar 文件中就一处用到 释义 用到阴历转阳历
  • Python爬虫+数据可视化

    一 工具和环境 IDE Pycharm 第三方模块 1 jieba 主要功能 处理分词 2 requests 主要功能 获取接口数据 3 sqlite3 主要功能 进行数据库相关操作 4 matplotlib主要功能 进行绘图 5 ecah
  • R获知颜色名称及对应颜色代码

    pdf D colors bar pdf height 120 par mar c 0 10 3 0 0 1 yaxs i barplot rep 1 length colors col rev colors names arg rev c
  • docker container 设置自动重启,自动执行

    编写自动执行的脚本 start server sh 脚本内容是你要执行的内容 BASE PATH data3 image generate export PYTHONPATH PYTHONPATH BASE PATH cd BASE PAT
  • 2021-07-22-第一次实训(HTML+CSS+JS)

    layout post 标题配置 title 第一次实训 HTML CSS JS 时间配置 date 2021 07 22 11 00 00 0800 目录配置 categories JavaWeb 标签配置 tag 学习笔记 conten
  • 5 区块链的缺点及面临的问题

    5 1 区块链的缺点 任何事物都有两面性 区块链也不例外 之前介绍了区块链的去中心化 集体维护 解决信任问题等种种好处 现在咱们来看一下区块链的缺点 1 无隐私性 在区块链公有链中 每一个参与者都能够获得完整的数据备份 所有交易数据都是公开
  • 一文了解社区发现算法

    最近在调研社区发现图聚类在区域划分中的应用 将一些编辑汇总的信息记录如下 社团划分了解 社区是什么 在社交网络中 用户相当于每一个点 用户之间通过互相的关注关系构成了整个网络的结构 在这样的网络中 有的用户之间的连接较为紧密 有的用户之间的
  • 【会议资源】2022年第四届计算与人工智能国际研讨会(ISCAI 2022)

    2022年第四届计算与人工智能国际研讨会 ISCAI 2022 重要信息 会议网址 www iscai org 会议时间 2022年12月16 18日 召开地点 中国北京 截稿时间 2022年11月16日 录用通知 投稿后2周内 收录检索
  • Socket通信及文件操作

    java Socket通信及文件操作 编译软件 Eclipse 一 客户端 package com import java io BufferedReader import java io DataOutputStream import j