Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用套接字将文件从服务器端传输到客户端?

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

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

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

这是我的客户端代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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 11: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

复制
相关文章
【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )
Socket 套接字 是一种 进程之间的 通信机制 , 通过套接字可以在 不同的进程之间 进行数据交换 ;
韩曙亮
2023/10/11
4950
【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )
套接字
版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/88673990
zy010101
2019/05/25
1.3K0
【Groovy】使用 Groovy 语言开发服务器 Server 和客户端 Client 套接字程序 ( 服务器端开发 )
然后调用 ServerSocket 服务器套接字 的 accept 方法 , 阻塞当前线程 , 等待客户端连接 ,
韩曙亮
2023/03/30
1.6K0
libevent跨平台套接字使用
编译 cmake编译,如果需要添加ssl功能可以查看https://editor.csdn.net/md/?articleId=113249464 编译命令如下: mkdir build && c
sofu456
2021/02/02
5740
Socket(套接字)
TCP/IP只是一个协议栈,Socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。
老马的编程之旅
2022/06/22
1.3K0
套接字选项
选项影响套接字操作,如 封包路由,OOB数据传输,获取和设置套接字选项分别是 getsockopt  setsockopt 用法如下: int getsockopt(SOCKET s,int level,int optname,char* optval,int* optlen); int setsockopt(SOCKET s,int level,int optname,char* optval,int* optlen); 每个协议层套接字的选项有不同的级别: 应用层:SOL_SOCKET 传输层:IPPR
用户1154259
2018/01/17
1.2K0
Python套接字
Python只支持AF_UNIX(基于文件)、AF_NETLINK(使用标准的BSD套接字接口进行用户级别和内核级别代码之间的IPC)、AF_TIPC(透明的进程间通信)、AF_INET(基于网络)家族。
用户4845306
2019/03/14
1.6K0
Java套接字
  本文补充一下Java关于套接字方面的内容,因为其应用相对比较简单,所以下面介绍两个程序实例。
云海谷天
2022/08/09
7680
Java套接字
16(套接字)
套接字描述符在Unix系统中是用文件描述符实现的。事实上,许多处理文件描述符函数(read和write)都可以处理文件描述符 要创建一个套接字,可以调用socket函数
提莫队长
2019/02/21
9820
套接字Socket编程
Socket,原意插座、插口。写软件程序时,可以想象成一根网线,一头插在客户端,一头插在服务端,然后进行通信。所以通信前,双方都要建立一个Socket。
JavaEdge
2021/12/07
1.3K0
套接字Socket编程
套接字随笔1
accept函数接受一个客户端请求后会返回一个新的SOCKFD值,当有不同的客户端同时有不同请求时,会返回不同的SOCKFD的值。这个不同的值和建立SOCKET 时生成的SOCKFD还是不同的。服务器与客户端之间的通信就是在这些不同的SOCKFD上进行的。
随心助手
2022/11/30
5500
IPC|网络套接字
为了访问由UDP提供的服务,你需要像以前一样使用套接字和close系统调用,但你需要用两个
heidsoft
2022/04/18
1.1K0
Socket 套接字协议
A network socket is an internal endpoint for sending or receiving data within a node on a computer network. Concretely, it is a representation of this endpoint in networking software (protocol stack), such as an entry in a table (listing communication protocol, destination, status, etc.), and is a form of system resource.
vanguard
2020/03/18
1.5K0
linux 网络套接字
在内核分析网络分组时,底层协议的数据将传输到跟高的层。而发送数据的时候顺序是相反的。每一层都是通过加(首部+净荷)传向跟底层,直至最终发送。
233333
2019/05/25
2.8K0
Socket - 套接字编程
目录 Socket - 套接字编程 Socket 通信流程图 Socket模块 socket()方法 部分参数 bind()方法 listen()方法 accept()方法 accept()函数返回值:sock、addr connect() 方法 close()方法 服务端客户端对比 简单案例 简易通信循环 优化通信循环 黏包问题 Struct 模块 规定报头 解决黏包问题 上传文件案例 UDP通信 Socket - 套接字编程 只要涉及到远程数据交互必须要操作OSI七层模型,那么每层都需要相应的程序
HammerZe
2022/03/25
1K0
Socket - 套接字编程
套接字Socket编程
Socket,原意插座、插口。写软件程序时,可以想象成一根网线,一头插在客户端,一头插在服务端,然后进行通信。所以通信前,双方都要建立一个Socket。
JavaEdge
2021/10/18
1.4K0
Python与套接字
服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时 客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应 数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束
星陨1357
2023/03/14
2.4K0
Python与套接字
golang使用原始套接字构造UDP包
RAW SOCKET 介绍 TCP/IP协议中,最常见的就是原始(SOCKET_RAW)、tcp(SOCKET_STREAM)、udp(SOCKET_DGRA)三种套接字。原始套接字能够对底层传输进行控制,允许自行组装数据包,比如修改本地IP,发送Ping包,进行网络监听。这里不做详细介绍,要了解更多可以网上自己查询。 实现 这里先看IP头结构: 其中16位总长度包括IP头长度和数据的长度,8位协议填写17,因为UDP协议类型为17。这里要说明一下IP头中的首部校验,这个值只校验IP头部,不包含数据。 这里
李海彬
2018/03/26
3.4K0
点击加载更多

相似问题

使用java套接字将文件从服务器传输到客户端。服务器端出错,传输到客户端的文件为空

40

使用CFWriteStream将文件传输到套接字

11

如何使用套接字将文件从服务器传输到Android移动

22

使用USB上的套接字将文件从设备传输到pc

11

使用python套接字编程将图像文件从服务器传输到客户端

264
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文