`

socket从服务器端下载文件到本地

阅读更多

 

具体需求是这样的:
    server1有个文件x.war,server2发起一个http请求到服务器端server1下载文件x.war,具体的请求是http://server1/downloadservlet,然后这个请求会返回文件x.war,server2接到返回结果后直接把把该文件保存到目录c:/bak下。

在服务端起个socket监听,客户端链接,然后下载
以下例子是客户端将服务器上存放在d:\mp4\test.mp4保存到本地d:\test2.dat
但服务器只能处理单个请求,可以自己试试将它改成多线程支持,练习下下
package socket;
import java.io.*;
import java.net.*;


public class DataServer {

        /**
         * @param args
         */
        public static final int SERVICE_PORT=1500;
        public static final int DATA_SIZE=1024*30;
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                String filePath="d:"+File.separator+"MP4"+File.separator+"test.MP4";
                File fileOut=new File(filePath);
                if(!fileOut.exists()){
                        System.out.println("File Not Found");
                        return;
                }
                
                try{
                        ServerSocket server = new ServerSocket(SERVICE_PORT);
                        System.out.println("Service started");
                        
                        for(;;){
                                Socket nextClient = server.accept();
                                System.out.println("Received request from " + nextClient.getInetAddress()+ ":"+ nextClient.getPort());
                                
                                
                                FileInputStream fis=new FileInputStream(fileOut);
                                OutputStream out =nextClient.getOutputStream();
                                PrintStream fileOutS = new PrintStream(out);
                                fileOutS.print(filePath+"\r\n");
                                
                                
                                byte[] bs = new byte[DATA_SIZE];
                                int length;
                                System.out.println("Sending data...");
                    while ( (length=fis.read(bs)) != -1){
                            out.write(bs,0,length);
                            bs = new byte[DATA_SIZE];
                            Thread.sleep(500);
                    }
                    System.out.println("Data sending completed");
                    fileOutS.close();
                                fis.close();
                                out.flush();
                                out.close();
                                nextClient.close();
                                
                        }
                        
                }catch(Exception e){
                        e.printStackTrace();
                }
                
        }

}


客户端
package socket;
import java.net.*;
import java.io.*;


public class DataClient {

        public static final int SERVICE_PORT = 1500;
        public static final int DATA_SIZE = 1024*60;
        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                String hostName="192.168.10.201";
                
                String filePath="D:"+File.separatorChar+"test2.dat";
                        try{
                        Socket client = new Socket(hostName,SERVICE_PORT);
                        System.out.println("Connection established");
                        System.out.println(client.getRemoteSocketAddress());
                        client.setSoTimeout(2000);
                        File file=new File(filePath);
                        if(file.exists()){
                                file.delete();
                                System.out.println("Create new file");
                        }
                        InputStream in = client.getInputStream();
                        BufferedReader readerFile = new BufferedReader(
                                        new InputStreamReader(in));

                        DataInputStream reader = new DataInputStream(in);
                        
                        FileOutputStream fos = new FileOutputStream(file);
                        String filename=readerFile.readLine();
                        System.out.println(filename);
                        
                        
                        byte[] bs = new byte[DATA_SIZE];
                int length;
                System.out.println("Data receiving started");
                while( (length=reader.read(bs)) != -1){
                        fos.write(bs,0,length);
                        bs = new byte[DATA_SIZE];
                        Thread.sleep(200);
                }
                System.out.println("Receiving completed");
                readerFile.close();
                reader.close();
                fos.close();        
                }catch(Exception e){
                        e.printStackTrace();
                }

        }

}

分享到:
评论
2 楼 greyfox4488 2009-07-22  
     
1 楼 javaww 2008-10-07  
我是socket初学者,请问:
怎样通过socket把数据库里查询出来的数据发送给客户端

相关推荐

    C# Winform实现Socket通信,包含C/S

    Socket通信的服务器端与客户端代码,用C# winform实现

    VC++ 6.0 TCP 通讯实例(服务器端和客户端)

    服务器端流程: 1、创建套接字(socket)。 2、将套接字绑定到一个本地地址和端口上(bind)。 3、将套接字设为监听模式,准备接收客户请求(listen)。 4、等待客户请求到来;当请求到来后,接受连接请求,返回一...

    Socket测试工具及源码

    1.建立Socket测试服务器端和测试客户端,并向其他端发送或接受报文数据,支持自动发送和自动应答,支持UDP和TCP; 2.录入的IP地址和端口等参数数据进行本地XML序列化,下次自动打开。(这个是我需要的,不用每次都...

    Socket TCP 服务端+客户端Demo.rar

    Soket TCP服务器端Server+客户端Client实现相互通讯以及文件的互传。 下载文件后,会有俩个文件夹,一个是服务器一个是客户端,每个单独的文件夹都是一个可执行项目。 项目没有直接获取你本地的IP地址和端口,你需要...

    C语言+CSV文件读写+Socket传输

    客户端读取CSV文件,通过Socket传输给服务器端,排序后保存CSV文件,并传给客户端

    socket简单推送文件

    socket简单的推送文件的功能,从客户端传到服务器端。原理是文件输入流读本地文件到字节数组里,再通过输出流传到服务器。在服务器端用输入流读到字节数组,再通过文件输出流写到本地。

    Socket编程实验报告.docx

    实验报告 实验一 Socket编程 一、实验目的 通过socket程序的编写、调试,掌握socket编程的基本方法,了解客户端与服务器端的特点,掌握并熟悉运用socket类与ServerSocket类。 实验内容 学习socket编程使用的类和接口...

    文件的上传和下载帮助类C#实现

    4. 基于Socket编程:编写客户端和服务器端代码,通过Socket建立连接,然后传输文件数据。 文件下载: 1. 链接下载:服务器端提供下载链接,用户使用浏览器、下载管理器或其他下载工具点击链接即可下载文件。 2. ...

    Socket测试工具

    1.建立Socket测试服务器端和测试客户端,并向其他端发送或接受报文数据,支持自动发送和自动应答,支持UDP和TCP; 2.录入的IP地址和端口等参数数据进行本地XML序列化,下次自动打开。(这个是我需要的,不用每次都...

    Socket通信基本流程图.docx

    在数据交换过程中,Socket 对象会负责将数据从发送端传输到接收端。 5. 关闭连接 当数据交换完成后,服务器端和客户端之间的连接可以关闭。关闭连接后,Socket 对象也会被关闭,以释放系统资源。 6. 销毁 Socket ...

    基于java的服务器端与客户端的即时通讯

    1.在服务器端通过指定一个用来等待的连接的端口号创建一个ServerSocket实例。...3.服务器端在本地建立一个文本文件存储与客户端互传字符串的记录。 4.设计服务器端可以同时连接多个不同的客户端

    课程设计基于Socket作为服务器与传感器通讯手段的家庭能源管理系统python源码+部署说明.zip

    服务器端采用了socketserver库,该库封装了socket模块,使得每个拨入的连接将被传入一个新的线程处理,从而实现多传感器通信的功能。 socket模块 socket模块运作模式如下: 1. 定义连接,端口族等(这些功能已经...

    socket工具源码

    建立Socket测试服务器端和测试客户端,并向其他端发送或接受报文数据,支持自动发送和自动应答,支持UDP和TCP; 2.录入的IP地址和端口等参数数据进行本地XML序列化,下次自动打开。(这个是我需要的,不用每次都...

    JAVA编写客户端向服务器传输文件

    使用JAVA编写一个使用TCP协议传输文件的Socket,实现客户端向服务器端发送一个文件,服务器端接收之后按相同的文件名在指定的目录下保存文件

    实现 Android 手机之间在局域网下传输任意文件【100011814】

    文件接收端开启Ap热点,作为服务器端建立Socket,在指定端口等待客户端的连接 文件发送端连接到Wifi热点,作为客户端主动连接到服务器端 文件发送端将待发送的文件信息模型(包括文件路径,文件大小和文件MD5码等...

    蓝牙4.0传输文件Socket通信批量传输选取的若干图片并显示

    打开APP后自动开启Socket等待连接,与客户端连接上后,自动开始发送数据。 - 一台手机作为接收端,右上方顶部ActionBar有一个按钮,点击后从本地图库添加图片和拍照获取图片。底部有一个按钮,连接上服务端之后点击...

    raspberry.zip_SOCKET opencv_opencv socket linux_raspberry_树莓派_树莓

    本程序包含服务器端和本地端两部分,服务器端可部署在树莓派3B上,本地端部署在mac或者windows上。两者通过socket进行通信。服务器端接收指令后会对指令进行分类处理,比如执行一个opencv示例程序,本程序还附带了...

    c语言原始SOCKEt编程.pdf

    客户 - 服务器模型是网络编程的基本模型,客户端向服务器端发送请求,服务器端处理请求并将结果返回给客户端。 简单的服务器 简单的服务器使用 socket 编程接收来自客户端的连接请求,并处理客户端的请求。 简单的...

    基于Java Socket的聊天室系统设计与实现.pdf

    * 服务器端:使用Java语言编写,使用Socket API来实现网络通信,服务器端可以显示当前在线的用户信息,并对用户进入或断开的信息加以显示。 五、结论 本文设计并实现了一个基于Java Socket的聊天室系统,该系统...

    SuperSocket开发框架

    简单易用,只需要几个类就能创建出健壮的Socket服务器端程序 性能优良, 稳定可靠 支持各种协议, 内置的协议解析工具让你把实现通信协议这种复杂的工作变得很简单 自动支持SSL/TLS传输层加密 强大,灵活而且可扩展的...

Global site tag (gtag.js) - Google Analytics