问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java socket传送文件

发布网友 发布时间:2022-04-22 20:21

我来回答

2个回答

热心网友 时间:2022-05-02 09:18

客户端代码如下:

import java.io.DataOutputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import java.net.InetSocketAddress;  
import java.net.Socket;  
  
/** 
 * 文件发送客户端主程序 
 * @author admin_Hzw 
 * 
 */  
public class BxClient {  
      
    /** 
     * 程序main方法 
     * @param args 
     * @throws IOException 
     */  
    public static void main(String[] args) throws IOException {  
        int length = 0;  
        double sumL = 0 ;  
        byte[] sendBytes = null;  
        Socket socket = null;  
        DataOutputStream dos = null;  
        FileInputStream fis = null;  
        boolean bool = false;  
        try {  
            File file = new File("D:/天啊.zip"); //要传输的文件路径  
            long l = file.length();   
            socket = new Socket();    
            socket.connect(new InetSocketAddress("127.0.0.1", 48123));  
            dos = new DataOutputStream(socket.getOutputStream());  
            fis = new FileInputStream(file);        
            sendBytes = new byte[1024];    
            while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {  
                sumL += length;    
                System.out.println("已传输:"+((sumL/l)*100)+"%");  
                dos.write(sendBytes, 0, length);  
                dos.flush();  
            }   
            //虽然数据类型不同,但JAVA会自动转换成相同数据类型后在做比较  
            if(sumL==l){  
                bool = true;  
            }  
        }catch (Exception e) {  
            System.out.println("客户端文件传输异常");  
            bool = false;  
            e.printStackTrace();    
        } finally{    
            if (dos != null)  
                dos.close();  
            if (fis != null)  
                fis.close();     
            if (socket != null)  
                socket.close();      
        }  
        System.out.println(bool?"成功":"失败");  
    }  
}

服务端代码如下:

import java.io.DataInputStream;  
import java.io.File;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.net.ServerSocket;  
import java.net.Socket;  
import java.util.Random;  
import com.boxun.util.GetDate;  
  
  
/** 
 * 接收文件服务 
 * @author admin_Hzw 
 * 
 */  
public class BxServerSocket {  
      
    /** 
     * 工程main方法 
     * @param args 
     */  
    public static void main(String[] args) {  
        try {  
            final ServerSocket server = new ServerSocket(48123);  
            Thread th = new Thread(new Runnable() {  
                public void run() {  
                    while (true) {  
                        try {    
                            System.out.println("开始监听...");  
                            /* 
                             * 如果没有访问它会自动等待 
                             */  
                            Socket socket = server.accept();  
                            System.out.println("有链接");  
                            receiveFile(socket);  
                        } catch (Exception e) {  
                            System.out.println("服务器异常");  
                            e.printStackTrace();  
                        }  
                    }  
                }  
            });  
            th.run(); //启动线程运行  
        } catch (Exception e) {  
            e.printStackTrace();  
        }       
    }  
  
    public void run() {  
    }  
  
    /** 
     * 接收文件方法 
     * @param socket 
     * @throws IOException 
     */  
    public static void receiveFile(Socket socket) throws IOException {  
        byte[] inputByte = null;  
        int length = 0;  
        DataInputStream dis = null;  
        FileOutputStream fos = null;  
        String filePath = "D:/temp/"+GetDate.getDate()+"SJ"+new Random().nextInt(10000)+".zip";  
        try {  
            try {  
                dis = new DataInputStream(socket.getInputStream());  
                File f = new File("D:/temp");  
                if(!f.exists()){  
                    f.mkdir();    
                }  
                /*   
                 * 文件存储位置   
                 */  
                fos = new FileOutputStream(new File(filePath));      
                inputByte = new byte[1024];     
                System.out.println("开始接收数据...");    
                while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {  
                    fos.write(inputByte, 0, length);  
                    fos.flush();      
                }  
                System.out.println("完成接收:"+filePath);  
            } finally {  
                if (fos != null)  
                    fos.close();  
                if (dis != null)  
                    dis.close();  
                if (socket != null)  
                    socket.close();   
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

热心网友 时间:2022-05-02 10:36

哈哈,这个我会啊!!!
给你个! 给我分吧!!!
//客户端
package socket;

import java.net.*;
import java.io.*;

/**
* SocketServer从SocketClient接受文件名,将文件发送到SocketServer端保存!
*
*
*/
public class SocketClient {
private static File f = null;
private static FileInputStream fr = null;
private static DataOutputStream dout = null;
private static Socket s = null;

public static void main(String[] args) {
SocketClient sc = new SocketClient();
sc.connectSocketServer(1234);
sc.sendFile("li.txt");
}

/**
* 连接服务器端
*
* @param port
* 要连接的服务器SocketServer端口
*/
public void connectSocketServer(int port) {
try {
s = new Socket(InetAddress.getLocalHost(), port);
} catch (UnknownHostException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
}

// 发送文件
public void sendFile(String str) {

byte[] b = new byte[1024];

f = new File(str);
try {
//数据输出流
dout = new DataOutputStream(new BufferedOutputStream(s
.getOutputStream()));

//文件读入流
fr = new FileInputStream(f);
int n = fr.read(b);
while (n != -1) {
//向网络中写入数据
dout.write(b, 0, n);
dout.flush();
//再次读取n字节
n = fr.read(b);
}

//关闭流
fr.close();
dout.close();
} catch (FileNotFoundException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
}

}
//服务器端
package socket;

import java.net.*;
import java.io.*;
/**
* Socketserver从客户端读取文件并保存为本地文件!
*
*
*/
public class Socketserver {
private static ServerSocket ss = null;
private static Socket s = null;

private static File f = null;
private static RandomAccessFile fw = null;

public static void main(String[] args) {
Socketserver sk = new Socketserver();
sk.initServer(1234);
sk.getFile();
}
/**
* 初始化服务器端
* @param port
* 服务器端要使用的端口
*/
public void initServer(int port){
try {
ss = new ServerSocket(port);
s = ss.accept();
} catch (IOException e) {

e.printStackTrace();
}
}

// 从SocketClient读取文件
public void getFile() {
byte[] b = new byte[1024];

try {
//定义输入流,s.getInputStream();
InputStream in = s.getInputStream();
DataInputStream din = new DataInputStream(new BufferedInputStream(
in));

//创建要保存的文件
f = new File("copy.txt");
fw = new RandomAccessFile(f, "rw");

int num = din.read(b);
while (num != -1) {
//向文件中写入0~num个字节
fw.write(b, 0, num);
//跳过num个字节再次写入文件
fw.skipBytes(num);
//读取num个字节
num = din.read(b);
}
//关闭输入,输出流
din.close();
fw.close();
} catch (IOException e) {

e.printStackTrace();
}
}

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 驰球保险柜故障分析:保险柜怎么一直总是有“咚”的声音? 驰球和艾谱中怎么选择一款质量好的保险柜啊。 艾谱保险箱怎么样?比驰球好吗 保险箱质量哪种好?艾谱还是驰球? 艾斐堡与驰球比哪个保险箱好? 驰球保险柜使用超控钥匙怎么还是打不开 驰球保险柜 一直闪good,无法输密码,打不开柜门 十大保险箱品牌中的艾谱和驰球哪个好 保险箱品牌艾斐堡,驰球,质量上谁更好? 驰球保险柜黑鲨打不开 驰球牌保险箱怎么修改密码 驰球保险柜+银鲨2应急钥匙孔在哪里 驰球保险柜怎么样,好吗 家用保险箱,驰球、艾谱选择哪个更合适? 驰球FDX-AD-45F3怎么开锁忘了密码怎么办 驰球保险柜应急钥匙孔在哪里- 问一问 驰球保险柜的品牌荣誉 驰球新日鲸保险柜说明书 什么是WLAN,WLAN有什么用? 华为手机怎么禁止使用WLAN网络,确认解除此限制 java中怎么用socket 一次传多个文件啊? 在JAVA的socket中进行传输对象和文件 为什么网易云很多歌手喜欢的歌都删了 用java socket实现一个服务器对多个客户端的文件传输 怎么我的网易云音乐里的歌单突然就没了? 关于用JAVA的SOCKET传输文件 怎么用java的socket进行文件传输?谁能给个简单的例子,包括发送端和接收端。 网易云音乐,我喜欢的音乐列表 全部删除了,有没有办法恢复啊? JAVA怎么通过socket传输各种类型文件 为什么网易云音乐歌单里的有些歌曲会消失了? java 使用ServerSocket和Socket实现文件传输。 找回网易云音乐中我喜欢的歌曲? 请问各位,如何用JAVA的socket技术进行文件和图片的传输? 我和朋友一起用网易云音乐一起听歌,我不小心把他的歌单弄没了,还能找... JAVA socket传输二进制文件问题 java socket局域网传输文件丢包严重 毛呢子搭配裙子怎么搭配合理好看? 为什么对方网易云音乐听歌排行突然出现新歌,突然又消失 java使用socket文件上传 女生冬天该如何穿或搭配裙子?