首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用套接字将文件从服务器端传输到客户端?

如何使用套接字将文件从服务器端传输到客户端?
EN

Stack Overflow用户
提问于 2011-02-23 00:18:35
回答 1查看 2.6K关注 0票数 1

在从哪里开始执行此任务时,我遇到了困难,我想要一些示例或输入,说明如何设置服务器/客户端组件来接收和发送数据,包括让客户机下载图像。

这是我的客户端代码:

代码语言:javascript
代码运行次数:0
运行
复制
package V3;

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

public class Version3Client {
    public static void main(String[] args) throws IOException {

        Socket kkSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            kkSocket = new Socket("localhost", 4444);
            out = new PrintWriter(kkSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: taranis.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: taranis.");
            System.exit(1);
        }

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        String fromServer;
        String fromUser;

        while ((fromServer = in.readLine()) != null) {
            System.out.println("Server: " + fromServer);
            if (fromServer.equals("Bye."))
                break;

            fromUser = stdIn.readLine();
        if (fromUser != null) {
                System.out.println("Client: " + fromUser);
                out.println(fromUser);
        }
        }

        out.close();
        in.close();
        stdIn.close();
        kkSocket.close();
    }
}

这是我的服务器端代码:

代码语言:javascript
代码运行次数:0
运行
复制
package V3;

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

public class Version3Server {
    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = null;
        boolean listening = true;

        try {
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(-1);
        }

        while (listening)
        new Version3ServerThread(serverSocket.accept()).start();

        serverSocket.close();

        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }

        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                clientSocket.getInputStream()));
        String inputLine, outputLine;
        Version3Protocol kkp = new Version3Protocol();

        outputLine = kkp.processInput(null);
        out.println(outputLine);

        while ((inputLine = in.readLine()) != null) {
             outputLine = kkp.processInput(inputLine);
             out.println(outputLine);
             if (outputLine.equals("Bye."))
                break;
        }
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}

为进一步规范而添加的线程类:

代码语言:javascript
代码运行次数:0
运行
复制
package V3;
    import java.net.*;
    import java.io.*;
    import java.io.FileWriter;

    public class Version3ServerThread extends Thread {
        private Socket socket = null;

        public Version3ServerThread(Socket socket) {
        super("Version3ServerThread");
        this.socket = socket;
        }

        public void run() {

        try {
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(
                        new InputStreamReader(
                        socket.getInputStream()));

            String inputLine, outputLine;
            Version3Protocol kkp = new Version3Protocol();
            outputLine = kkp.processInput(null);
            out.println(outputLine);

            while ((inputLine = in.readLine()) != null) {
            outputLine = kkp.processInput(inputLine);
            out.println(outputLine);
            if (outputLine.equals("Bye"))
                break;
                    if(kkp.getInteraction()){
                      Logging.writeToFile(socket.getInetAddress());
                    }
            }
            out.close();
            in.close();
            socket.close();

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

回答 1

Stack Overflow用户

发布于 2011-02-23 19:14:10

到目前为止,没有文件传输能力的客户端服务器通信代码,在我看来还不错。我想编译以查找任何错误,但您没有包括Version3Protocol和日志记录。如果它确实编译了,那么下一步将是使用FileInputStream和一个新文件打开您想要在服务器上传输的文件,以便用FileOutputStream在客户机上写入:

http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileInputStream.html http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileOutputStream.html

然后,您可以将文件读入缓冲区,使用套接字传输它,在客户端接收它,并将缓冲区内容复制到FileOutputStream中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5085684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档