Java가 LAN 파일 전송 코드 대소문자 공유를 구현하는 방법
이 기사에서는 LAN 파일 전송을 구현하는 Java의 예제에 대한 관련 정보를 주로 소개합니다. 여기에는 TCP 및 파일 읽기 및 쓰기에 대한 지식을 이해하는 데 도움이 됩니다. 전송 예시
Java의 TCP 지식, 파일 읽기 및 쓰기, 소켓 등에 대한 이해와 응용 지식입니다. 좋은 예입니다. 참고용으로
구현 코드:ClientFile.java
/** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ package com.tcp.file; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JProgressBar; public class ClientFile extends Thread { private static String ip; private static int port; private String filepath; private long size; private JProgressBar jprogressbar; public ClientFile(String ip, int port, String filepath, JProgressBar jprogressbar) { this.ip = ip; this.port = port; this.filepath = filepath; this.jprogressbar = jprogressbar; } public void run() { try { Socket socket = new Socket(ip, port); InputStream input = socket.getInputStream(); OutputStream output = socket.getOutputStream(); File file = new File(filepath); // 第一次传输文件名字and文件的大小 String str1 = file.getName() + "\t" + file.length(); output.write(str1.getBytes()); output.flush(); byte[] b = new byte[100]; int len = input.read(b); String s = new String(b, 0, len); // 如果服务器传输过来的是ok那么就开始传输字节 if (s.equalsIgnoreCase("ok")) { long size = 0; jprogressbar.setMaximum((int) (file.length() / 10000));// 设置进度条最大值 FileInputStream fin = new FileInputStream(file); byte[] b1 = new byte[1024 * 1024 * 2]; while (fin.available() != 0) { len = fin.read(b1); output.write(b1, 0, len); output.flush(); size += len; jprogressbar.setValue((int) (size / 10000)); } if (fin.available() == 0) { javax.swing.JOptionPane.showMessageDialog(null, "传输完毕!即将推出......"); try { Thread.sleep(1500); System.exit(0); } catch (InterruptedException e) { e.printStackTrace(); } } output.close(); fin.close(); socket.close(); } else { // 传输的不是ok那么就弹出个信息框对方拒绝 javax.swing.JOptionPane.showMessageDialog(null, "对方拒绝接收此数据!"); } } catch (IOException e) { javax.swing.JOptionPane.showMessageDialog(null, "IOException"); } } }
ServerFile.java
/** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ package com.tcp.file; import java.io.*; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.JProgressBar; public class ServerFile extends Thread { private Socket socket; private JProgressBar jprogressbars; public ServerFile(Socket socket, JProgressBar jprogressbars) { this.socket = socket; this.jprogressbars = jprogressbars; } public void run() { try { InputStream input = socket.getInputStream(); OutputStream output = socket.getOutputStream(); byte[] b = new byte[100]; int len = input.read(b); String ss = new String(b, 0, len); String[] str1 = ss.split("\t");// 把接收到的信息按制表符拆分 String filename = str1[0];// 起始位文件名称 String filesize = str1[1];// 下标1位文件的大小 long size = Long.parseLong(filesize); InetAddress ip = socket.getInetAddress();// 得到发送端的IP int port = socket.getPort();// 得到发送端的端口 long s = size / 1024 / 1024; String name = " M"; if (s < 1) { s = (size / 1024); name = " K"; } else if (s > 1024) { float s1 = size / 1024 / 1024; s = (size / 1024 / 1024 / 1024); name = " G多"; } // 弹出确认款,显示对方的ip端口以及文件的名称和大小是否需要接收 int i = JOptionPane.showConfirmDialog(null, "来自: " + ip + ":" + port + "\n文件名称: " + filename + "\n文件大小: " + s + name); // 如果点击确认 if (i == JOptionPane.OK_OPTION) { // 那么传输ok给发送端示意可以接收 output.write("ok".getBytes()); output.flush(); JFileChooser jf = new JFileChooser(); // 存储到本地路径的夹子 jf.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); jf.showOpenDialog(null); jprogressbars.setMaximum((int) (size / 10000)); FileOutputStream fout = new FileOutputStream(new File(jf.getSelectedFile(), filename)); b = new byte[1024 * 1024 * 2]; long size1 = 0; while ((len = input.read(b)) != -1) { fout.write(b, 0, len); size1 += len; jprogressbars.setValue((int) (size1 / 10000)); } fout.close(); input.close(); socket.close(); } else { // 否不接收此文件 output.write("no".getBytes()); output.flush(); } } catch (IOException e) { javax.swing.JOptionPane.showMessageDialog(null, "IOException"); } } private static ServerSocket server = null; // 启动服务器 public static void openServer(int port, JProgressBar jprogressbar) throws Exception { new Thread() { public void run() { try { if (server != null && !server.isClosed()) { server.close(); } server = new ServerSocket(port); new ServerFile(server.accept(), jprogressbar).start(); } catch (IOException e) { javax.swing.JOptionPane.showMessageDialog(null, "IOException"); } } }.start(); } // 关闭服务器 public static void closeServer() { try { server.close(); } catch (IOException e) { javax.swing.JOptionPane.showMessageDialog(null, "IOException"); } } }
SocketFileJFrame.java
/** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ package com.tcp.file; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import java.awt.Color; import javax.swing.JTabbedPane; import java.awt.Panel; import javax.swing.border.TitledBorder; import javax.swing.UIManager; import javax.swing.border.CompoundBorder; import javax.swing.JLabel; import java.awt.Font; import javax.swing.JTextField; import javax.swing.JToggleButton; import javax.swing.JProgressBar; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.event.AncestorListener; import javax.swing.event.AncestorEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.awt.event.ActionEvent; public class SocketFileJFrame extends JFrame { private JPanel contentPane; private JTextField textField; private JTextField textField_1; private JTextField textField_2; private JTextField textField_3; private JProgressBar progressBar_2; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { SocketFileJFrame frame = new SocketFileJFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public SocketFileJFrame() { setIconImage(Toolkit.getDefaultToolkit() .getImage(SocketFileJFrame.class.getResource("/javax/swing/plaf/metal/icons/ocean/newFolder.gif"))); setForeground(Color.WHITE); setResizable(false); setTitle("局域网文件传输 V1.0"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); int width = Toolkit.getDefaultToolkit().getScreenSize().width;//获取分辨率宽 int heiht = Toolkit.getDefaultToolkit().getScreenSize().height;//获取分辨率高 //分辨率宽高减去软件的宽高除以2把软件居中显示 setBounds((width - 747) / 2, (heiht - 448) / 2, 738, 472); contentPane = new JPanel(); contentPane.setBackground(Color.WHITE); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JPanel panel_1 = new JPanel(); panel_1.setToolTipText(""); panel_1.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "\u6587\u4EF6\u63A5\u6536\u670D\u52A1\u5668", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0))); panel_1.setBackground(Color.WHITE); panel_1.setBounds(39, 28, 652, 119); contentPane.add(panel_1); panel_1.setLayout(null); JLabel label = new JLabel("\u7AEF\u53E3:"); label.setFont(new Font("新宋体", Font.PLAIN, 22)); label.setBounds(26, 31, 66, 35); panel_1.add(label); //端口文本框 textField = new JTextField(); textField.setFont(new Font("宋体", Font.PLAIN, 19)); textField.setText("8080"); textField.setBounds(89, 36, 126, 26); panel_1.add(textField); textField.setColumns(10); //服务器关闭启动的按钮 JToggleButton tglbtnNewToggleButton = new JToggleButton("\u542F\u52A8\u670D\u52A1\u5668"); tglbtnNewToggleButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (tglbtnNewToggleButton.isSelected()) { //如果是按下显示关闭服务器 tglbtnNewToggleButton.setText("关闭服务器"); textField.setEnabled(false);//按下之后 端口文本框要设置不能写入 try { //启动服务器 ServerFile.openServer(Integer.parseInt(textField.getText()) , progressBar_2); } catch (Exception e1) { javax.swing.JOptionPane.showMessageDialog(null, "Exception"); } } else { //否启动服务器 tglbtnNewToggleButton.setText("启动服务器"); textField.setEnabled(true);////弹起之后 端口文本框要设置可写状态 ServerFile.closeServer();//关闭服务器 } } }); tglbtnNewToggleButton.setFont(new Font("微软雅黑 Light", Font.PLAIN, 19)); tglbtnNewToggleButton.setBackground(Color.WHITE); tglbtnNewToggleButton.setForeground(Color.DARK_GRAY); tglbtnNewToggleButton.setBounds(345, 34, 138, 28); panel_1.add(tglbtnNewToggleButton); //文件接收端的进度条 progressBar_2 = new JProgressBar(); progressBar_2.setBackground(Color.WHITE); progressBar_2.setForeground(new Color(255, 218, 185)); progressBar_2.setStringPainted(true); progressBar_2.setBounds(460, 101, 190, 14); panel_1.add(progressBar_2); JPanel panel_2 = new JPanel(); panel_2.setToolTipText(""); panel_2.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "\u6587\u4EF6\u4F20\u8F93\u7AEF", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0))); panel_2.setBackground(Color.WHITE); panel_2.setBounds(39, 191, 652, 202); contentPane.add(panel_2); panel_2.setLayout(null); //文件传输端的进度条 JProgressBar progressBar_1 = new JProgressBar(); progressBar_1.setFont(new Font("宋体", Font.PLAIN, 18)); progressBar_1.setStringPainted(true); progressBar_1.setForeground(new Color(240, 128, 128)); progressBar_1.setBackground(Color.WHITE); progressBar_1.setBounds(96, 169, 472, 20); panel_2.add(progressBar_1); JLabel lblIp = new JLabel("IP\u5730\u5740:"); lblIp.setFont(new Font("微软雅黑 Light", Font.PLAIN, 20)); lblIp.setBounds(26, 44, 70, 27); panel_2.add(lblIp); //IP地址文本框 textField_1 = new JTextField(); textField_1.setText("127.0.0.1"); textField_1.setFont(new Font("新宋体", Font.PLAIN, 20)); textField_1.setBounds(96, 44, 184, 30); panel_2.add(textField_1); textField_1.setColumns(10); JLabel label_1 = new JLabel("\u7AEF\u53E3:"); label_1.setFont(new Font("微软雅黑 Light", Font.PLAIN, 20)); label_1.setBounds(308, 42, 80, 30); panel_2.add(label_1); //端口文本框 textField_2 = new JTextField(); textField_2.setText("8080"); textField_2.setFont(new Font("新宋体", Font.PLAIN, 20)); textField_2.setColumns(10); textField_2.setBounds(359, 44, 80, 30); panel_2.add(textField_2); //打开本地路径的按钮 JButton button = new JButton("..."); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser jf = new JFileChooser(); jf.setFileSelectionMode(JFileChooser.FILES_ONLY); jf.showOpenDialog(SocketFileJFrame.this); textField_3.setText(jf.getSelectedFile().getPath()); } }); button.setBackground(Color.WHITE); button.setBounds(533, 51, 35, 20); panel_2.add(button); JLabel label_2 = new JLabel("\u8DEF\u5F84:"); label_2.setFont(new Font("微软雅黑 Light", Font.PLAIN, 15)); label_2.setBounds(489, 50, 44, 18); panel_2.add(label_2); //显示文件路径框 textField_3 = new JTextField(); textField_3.setEnabled(false); textField_3.setFont(new Font("微软雅黑 Light", Font.PLAIN, 20)); textField_3.setBounds(96, 100, 343, 38); panel_2.add(textField_3); textField_3.setColumns(10); JLabel lblNewLabel = new JLabel("\u6587\u4EF6:"); lblNewLabel.setFont(new Font("等线 Light", Font.PLAIN, 25)); lblNewLabel.setBounds(33, 97, 56, 38); panel_2.add(lblNewLabel); //确定按钮 JButton button_1 = new JButton("\u786E\u5B9A"); button_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ClientFile client = new ClientFile( textField_1.getText(), Integer.parseInt(textField_2.getText()), textField_3.getText(), progressBar_1); client.start(); } }); button_1.setForeground(new Color(255, 255, 0)); button_1.setBackground(new Color(233, 150, 122)); button_1.setFont(new Font("微软雅黑 Light", Font.BOLD, 20)); button_1.setBounds(475, 100, 91, 38); panel_2.add(button_1); } }
위 내용은 Java가 LAN 파일 전송 코드 대소문자 공유를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Spring Boot는 강력하고 확장 가능하며 생산 가능한 Java 응용 프로그램의 생성을 단순화하여 Java 개발에 혁명을 일으킨다. Spring Ecosystem에 내재 된 "구성에 대한 협약"접근 방식은 수동 설정, Allo를 최소화합니다.
