局域网传输文件Demo

客户端

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

public class FileClient extends JFrame {

    private JPanel contentPane;
    public JButton btnNewButton;
    public JLabel labelStatus;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FileClient frame = new FileClient();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public FileClient() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        btnNewButton = new JButton("\u5F00\u59CB\u4F20\u8F93\u6587\u4EF6");
        btnNewButton.addActionListener(new BtnNewButtonActionListener());
        btnNewButton.setBounds(125, 97, 163, 23);
        contentPane.add(btnNewButton);

        labelStatus = new JLabel("");
        labelStatus.setBounds(125, 147, 163, 28);
        contentPane.add(labelStatus);
    }
    private class BtnNewButtonActionListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            try {
                Socket socket = new Socket("10.12.50.10",8888);
                new ClientThd(socket).start();
                labelStatus.setText("文件传输完毕");
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }

    class ClientThd extends Thread{
        Socket socket;

        public ClientThd(Socket socket) {
            this.socket = socket;
        }
        public void run() {
            File f = new File("D:\\aaa.txt");
            DataInputStream dis = null;
            DataOutputStream dos = null;
            try {
                dis = new DataInputStream(new FileInputStream(f));//读磁盘文件
                dos = new DataOutputStream(socket.getOutputStream());//socket输出流
                //缓冲区的大小为1024
                byte[] buff = new byte[1024];
                int icurrPos = 0;
                while((icurrPos=dis.read(buff, 0, 1024))!=-1){
                    dos.write(buff, 0, icurrPos);
                    dos.flush();
                }     

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

public class FileServer extends JFrame {

    private JPanel contentPane;
    public JButton button;
    ServerSocket server;
    public JLabel labelStatus;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FileServer frame = new FileServer();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public FileServer() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        button = new JButton("\u5F00\u542F\u4F20\u8F93\u6587\u4EF6\u670D\u52A1");
        button.addActionListener(new ButtonActionListener());
        button.setBounds(125, 108, 154, 23);
        contentPane.add(button);

        labelStatus = new JLabel("");
        labelStatus.setBounds(127, 162, 152, 23);
        contentPane.add(labelStatus);
    }

    private class ButtonActionListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            try {
                server = new ServerSocket(8888);
                new serverThd().start();
                labelStatus.setText("服务已开启");
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }
    class serverThd extends Thread{
        public void run() {
            Socket s = null;
            DataInputStream dis = null;
            DataOutputStream dos = null;
            try {
                s = server.accept();

                dis = new DataInputStream(s.getInputStream());                //目标路径
                dos = new DataOutputStream(new FileOutputStream("D:\\aa.txt"));

                byte[] buff = new byte[1024];
                int icurrPos = 0;
                while((icurrPos=dis.read(buff, 0, 1024))!=-1){
                    dos.write(buff,0,icurrPos);
                    dos.flush();
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally{
                try {
                    dis.close();
                    dos.close();
                    s.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

写本地文件到socket流中,服务器负责读流中数据,写入目标路径,完成文件的传输

原文地址:https://www.cnblogs.com/lkldeblog/p/9095432.html

时间: 2024-09-30 08:14:56

局域网传输文件Demo的相关文章

socket局域网传输文件

其中发送端发送多少数据可以定制,(可以使用for循环循环读取文件并且send),但是在recv端,不能采用for循环定制recv大小,(及时最后加了if语句判断图像是不是接收完毕),另外在fwrite文件中的第二个参数,绝对不要定制,因为网络是不确定的你不知道socket缓冲区中的文件的确定数目,你recv写明接收8k,但是缓冲分区只有4k你也只能接4k,当你fwrite还写8k就有问题(fwrite写的时候最后用recv的返回值,表示正确接收字节数目). recv端代码: while(coun

Android网络编程只局域网传输文件

Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: 1 package com.jiao.filesend; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.FileInputStream; 6 import java.io.FileOutputStream; 7 import java

兼容所有系统的局域网传输文件通用方法

既然要通讯,那么必须有服务器和客户端.本文使用sshd做服务器,scp做客户端. 接受文件的一方必须使用sshd启动并绑定本机局域网端口,如0.0.0.0:22 绑定方法就是配置/etc/ssh/sshd_config这个配置文件,如果A(windows/linux/macos)向B(windows/linux/macos)发送文件,那么有两种方式: 假设A的用户名为userA,IP为192.168.1.10,文件路径/1.txt A运行sshd服务/usr/sbin/sshd,B运行scp [

【转】QQ传输文件原理参考(来自互联网)

QQ的文件发送是怎样的过程呢?通常,发送文件的计算机首先要通过消息服务器将其IP地址发送给接收计算机,当接收计算机同意接收的确认消息反馈到消息服务器后,消息服务器将据此设置好文件传输对话.随即,发送计算机与接收计算机就会在确定好的端口范围内,建立起TCP或UDP连接开始文件的检索与传输. 在默认状态下,QQ优先采用了UDP(User Data Protocol,用户数据报协议)协议传送数据,而对可靠性要求高的数据通讯系统往往使用TCP协议传输数据.与TCP协议不同,UDP协议并不提供数据传送的验

C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)

在程序设计中,涉及数据存储和数据交换的时候,不管是B/S还是C/S模式,都有这样一个概念:数据库服务器.这要求一台性能和配置都比较好的主机作为服务器,以满足数目众多的客户端进行频繁访问.但是对于一些数据交换的要求不主同,而且涉及到的通讯个体数目不多,如果还采用“一主机多客户机”的模式,便要求一台硬件配置良好而且软件上安装了相关数据服务软件,这样会造成硬件和软件上的很多不必要的成本,这时Socket在点对点的平行对象之间的网络通讯的优势就就发挥出来了. 其实对于Socket通讯来说,服务器和客户端

15、NFC技术:使用Android Beam技术传输文件

传输文件的API 从Android4.1开始,NfcAdapter类增加了如下两个推送数据的方法. NfcAdapter.setBeamPushUris NfcAdapter.setBeamPushUrisCallback 这两个方法的原型如下: public void setBeamPushUris(Uri[] uris, Activity activity); public void setBeamPushUrisCallback(CreateBeamUrisCallback callbac

两台Linux系统之间传输文件的几种方法

scp传输 当两台LINUX主机之间要互传文件时可使用SCP命令来实现 scp传输速度较慢,但使用ssh通道保证了传输的安全性 复制文件 将本地文件拷贝到远程 scp 文件名 –用户名@计算机IP或者计算机名称:远程路径 从远程将文件拷回本地 scp –用户名@计算机IP或者计算机名称:文件名 本地路径 命令格式 scp local_file [email protected]_ip:remote_folder 或者 scp local_file [email protected]_ip:rem

java socket通信-传输文件图片--传输图片

ClientTcpSend.java   客户端发送类 package com.yjf.test; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.InetSocketAddress; import java.net.Socket; public class ClientTcpSend { public static String clien

securecrt在linux与windows之间传输文件(转)

摘自:http://blog.csdn.net/rangf/article/details/6096365 SecureCRT这款SSH客户端软件同时具备了终端仿真器和文件传输功能.比ftp命令方便多了,而且服务器不用再开FTP服务了.rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具. windows端需要支持ZModem的telnet/ssh客户端,SecureCRT就可以用SecureCRT登陆到Unix/Linux主机(telnet或ssh均可).