`

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把数据库里查询出来的数据发送给客户端

相关推荐

    SOCKET TCP 文件传输 客户端 服务器端 client svever

    本项目"SOCKET TCP 文件传输 客户端 服务器端 client svever"就是基于TCP协议构建一个简单的文件传输系统,通过客户端与服务器端的交互来完成文件的发送和接收。 首先,我们要了解TCP的基本原理。TCP通过三次握手...

    Java基于Socket文件传输示例:服务器端和客户端

    在这个示例中,我们将探讨如何使用Java的Socket实现文件传输,包括服务器端和客户端的实现细节。 首先,我们从服务器端开始。服务器端的核心是监听特定端口(在这个例子中是8821)上的连接请求,并在接收到连接后...

    c#基于socket 服务器端TCP程序

    标题中的“c#基于socket 服务器端TCP程序”指的是使用C#语言编写的一套服务器应用程序,它利用了Socket类库来处理TCP(传输控制协议)连接。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,广泛用于...

    socket编程(实现对服务器端的文件操作)

    客户端发送删除文件的命令到服务器,服务器端接收到命令后,使用操作系统提供的API(如`unlink()`或`remove()`)删除指定的文件,并将结果反馈给客户端。由于文件删除操作不涉及大量数据传输,因此相对简单,但需要...

    C#基于socket通讯服务器端

    总的来说,C#基于Socket的通讯服务器端是网络编程的基础,它涉及到网络协议、并发处理、数据传输和错误控制等多个方面。通过这样的实践,开发者不仅可以掌握网络编程的基本技能,还能为构建更复杂的服务奠定坚实的...

    Java Socket PC端传输文件简易服务器客户端

    客户端通过Socket的输出流将文件内容写入网络,服务器端则通过输入流接收这些数据。 5. **多线程处理**: - 为了处理多个并发的客户端连接,服务器端可能需要使用多线程。每个新连接的客户端都会启动一个新的线程...

    socket 编程客户端和服务器端

    在本示例中,我们关注的是客户端和服务器端的Socket编程,主要涉及到如何在局域网内进行文件传输。 首先,我们要理解Socket的基本概念。Socket可以看作是两台计算机之间的通信端点,它提供了数据传输的接口。在TCP/...

    android使用socket上传、下载文件

    2. 文件读写:与服务器端类似,客户端也需要获取Socket的输入流和输出流,进行文件的读取或写入操作。 **三、文件上传流程** 1. 客户端选择本地文件,读取文件内容到字节数组。 2. 通过Socket的OutputStream将字节...

    socket通信,客户端向服务器传文件

    在IT领域,Socket通信是一种基于TCP/IP协议族的...客户端通过建立Socket连接,读取文件内容并写入Socket的输出流,而服务器端则接收这些数据并保存到本地。这个过程涉及到了网络编程、文件I/O和流操作等多个知识点。

    Socket服务器端与客户端程序.txt

    Socket编程是网络应用程序开发的基石,通过本段代码的学习,我们了解了如何在Windows环境下使用Winsock库实现Socket服务器端和客户端的基本功能。掌握Socket编程不仅可以帮助开发者构建复杂的网络应用,还能加深对...

    python利用socket上传文件的客户端和服务器代码

    客户端将本地文件发送到服务器,而服务器端接收并保存这些文件。 首先,让我们从服务器端开始。服务器端需要监听特定的端口,等待客户端的连接请求。一旦有客户端连接,服务器就可以接收文件数据。以下是一个基本的...

    C# Socket Udp 通信服务器端(控制台应用程序)

    本资源"**C# Socket Udp 通信服务器端(控制台应用程序)**"提供了C#语言实现的UDP通信服务器端代码,它是一个基于控制台的应用程序,特别适用于学习和开发UDP相关项目。本地端口设置为10000,意味着服务器将在该端口...

    C# Socket Udp 通信服务器端(Windows Server)

    总结来说,C# Socket UDP通信服务器端的实现涉及创建Socket实例、绑定到指定端口、接收和发送数据报,以及可能的服务化部署。对于开发者来说,理解这些概念和步骤是构建高效网络应用程序的关键。

    使用socket基于c#编写的服务器端的方法

    本篇文章将基于提供的文件信息,深入探讨如何使用C#语言来实现服务器端的Socket编程,并且会涵盖TCP协议的基础、HTTP协议的工作原理以及Socket在其中的应用。 #### 一、Socket基础 Socket是一种用于在网络节点之间...

    socket 文件上传下载

    1. **创建Server Socket**:服务器端通过`socket.socket()`函数创建一个Socket对象,并调用`bind()`方法绑定到指定的IP地址和端口号,然后调用`listen()`方法开始监听。 2. **接受连接**:当客户端尝试连接时,...

    socket通讯 .net做为服务器端和java 做为客户端

    在提供的压缩包文件中,"ConsoleApplication1"可能是一个简单的C# Socket服务器示例,而"demo"可能是Java客户端的代码。"说明.txt"应该包含了更详细的实现细节和使用说明。为了更好地理解这个系统,你需要阅读这些...

    socket实现文件上传下载

    服务器端需要读取文件并发送给客户端,而客户端则接收文件并保存到本地。具体实现可以参考文件上传的过程,只是需要注意调整数据流的方向。 #### 五、总结 通过本文的介绍,我们可以了解到使用 Socket 实现文件...

    socket网络编程客户和服务器进行文件传输

    服务器端读取文件并将其内容通过socket发送到客户端,客户端则接收数据并写入本地文件。需要注意的是,由于TCP是流式传输,所以可能需要处理数据的边界问题,比如使用固定大小的缓冲区或者特殊的分隔符来确保数据的...

    简单socket文件传输(类似FTP)服务器端

    本项目"简单socket文件传输(类似FTP)服务器端"实现了类似FTP(File Transfer Protocol)的功能,允许用户通过网络进行文件的上传和下载,同时支持断点续传和多线程,提升了文件传输的效率和可靠性。 首先,我们来...

    简单的socket 服务器/客户端编程

    在本主题中,我们将深入探讨“简单的socket服务器/客户端编程”的概念、原理及其实现步骤,这非常适合初学者入门。 首先,让我们理解什么是Socket。Socket是操作系统提供的一个接口,它允许应用程序通过网络进行...

Global site tag (gtag.js) - Google Analytics