java中socket网络通信,实现客户端上传文件案例(代码片段)

weixin_ancenhw weixin_ancenhw     2023-03-21     517

关键词:

服务端代码

/*
    文件上传案例服务器端:读取客户端上传的文件,保存到服务器的硬盘,给客户端回写"上传成功"

    明确:
        数据源:客户端上传的文件
        目的地:服务器的硬盘 d:\\\\upload\\\\1.jpg

    实现步骤:
        1.创建一个服务器ServerSocket对象,和系统要指定的端口号
        2.使用ServerSocket对象中的方法accept,获取到请求的客户端Socket对象
        3.使用Socket对象中的方法getInputStream,获取到网络字节输入流InputStream对象
        4.判断d:\\\\upload文件夹是否存在,不存在则创建
        5.创建一个本地字节输出流FileOutputStream对象,构造方法中绑定要输出的目的地
        6.使用网络字节输入流InputStream对象中的方法read,读取客户端上传的文件
        7.使用本地字节输出流FileOutputStream对象中的方法write,把读取到的文件保存到服务器的硬盘上
        8.使用Socket对象中的方法getOutputStream,获取到网络字节输出流OutputStream对象
        9.使用网络字节输出流OutputStream对象中的方法write,给客户端回写"上传成功"
        10.释放资源(FileOutputStream,Socket,ServerSocket)
 */
public class TcpServer 
    public static void main(String[] args) throws IOException 
        //1.创建一个服务器ServerSocket对象,和系统要指定的端口号
        ServerSocket server = new ServerSocket(8888);
        //2.使用ServerSocket对象中的方法accept,获取到请求的客户端Socket对象

        /*
            让服务器一直处于监听状态(死循环accept方法)
            有一个客户端上传文件,就保存一个文件
         */
        while(true)
            Socket socket = server.accept();

            /*
                使用多线程技术,提高程序的效率
                有一个客户端上传文件,就开启一个线程,完成文件的上传
             */
            new Thread(new Runnable() 
                //完成文件的上传
                @Override
                public void run() 
                    try 
                        //3.使用Socket对象中的方法getInputStream,获取到网络字节输入流InputStream对象
                        InputStream is = socket.getInputStream();
                        //4.判断d:\\\\upload文件夹是否存在,不存在则创建
                        File file =  new File("d:\\\\upload");
                        if(!file.exists())
                            file.mkdirs();
                        

                    /*
                        自定义一个文件的命名规则:防止同名的文件被覆盖
                        规则:域名+毫秒值+随机数
                     */
                        String fileName = "itcast"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";

                        //5.创建一个本地字节输出流FileOutputStream对象,构造方法中绑定要输出的目的地
                        //FileOutputStream fos = new FileOutputStream(file+"\\\\1.jpg");
                        FileOutputStream fos = new FileOutputStream(file+"\\\\"+fileName);
                        //6.使用网络字节输入流InputStream对象中的方法read,读取客户端上传的文件


                        int len =0;
                        byte[] bytes = new byte[1024];
                        while((len = is.read(bytes))!=-1)
                            //7.使用本地字节输出流FileOutputStream对象中的方法write,把读取到的文件保存到服务器的硬盘上
                            fos.write(bytes,0,len);
                        


                        //8.使用Socket对象中的方法getOutputStream,获取到网络字节输出流OutputStream对象
                        //9.使用网络字节输出流OutputStream对象中的方法write,给客户端回写"上传成功"
                        socket.getOutputStream().write("上传成功".getBytes());
                        //10.释放资源(FileOutputStream,Socket,ServerSocket)
                        fos.close();
                        socket.close();
                    catch (IOException e)
                        System.out.println(e);
                    
                
            ).start();


        

        //服务器就不用关闭
        //server.close();
    


客户端代码:

/*
    文件上传案例的客户端:读取本地文件,上传到服务器,读取服务器回写的数据

    明确:
        数据源:c:\\\\1.jpg
        目的地:服务器

    实现步骤:
        1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源
        2.创建一个客户端Socket对象,构造方法中绑定服务器的IP地址和端口号
        3.使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream对象
        4.使用本地字节输入流FileInputStream对象中的方法read,读取本地文件
        5.使用网络字节输出流OutputStream对象中的方法write,把读取到的文件上传到服务器
        6.使用Socket中的方法getInputStream,获取网络字节输入流InputStream对象
        7.使用网络字节输入流InputStream对象中的方法read读取服务回写的数据
        8.释放资源(FileInputStream,Socket)
 */
public class TcpClient 
    public static void main(String[] args) throws IOException 
        //1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源
        FileInputStream fis = new FileInputStream("C:\\\\Users\\\\Administrator\\\\Desktop\\\\微信支付\\\\20221024093601.png");
        //2.创建一个客户端Socket对象,构造方法中绑定服务器的IP地址和端口号
        Socket socket = new Socket("127.0.0.1",8888);
        //3.使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream对象
        OutputStream os = socket.getOutputStream();
        //4.使用本地字节输入流FileInputStream对象中的方法read,读取本地文件
        int len = 0;
        byte[] bytes = new byte[1024];
        while((len = fis.read(bytes))!=-1)
            //5.使用网络字节输出流OutputStream对象中的方法write,把读取到的文件上传到服务器
            os.write(bytes,0,len);
        

        /*
            解决:上传完文件,给服务器写一个结束标记
            void shutdownOutput() 禁用此套接字的输出流。
            对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。
         */
        socket.shutdownOutput();

        //6.使用Socket中的方法getInputStream,获取网络字节输入流InputStream对象
        InputStream is = socket.getInputStream();



        //7.使用网络字节输入流InputStream对象中的方法read读取服务回写的数据
        while((len = is.read(bytes))!=-1)
            System.out.println(new String(bytes,0,len));
        


        //8.释放资源(FileInputStream,Socket)
        fis.close();
        socket.close();
    


java中socket实现最简单的客户端与服务端通信

Java中Socket实现最简单的客户端与服务端通信引言:因为最近项目中要接入某通信协议接口,基于TCP/IP的socket接口。于是就在本地弄一个最简单的Socket通信仅供学习。话不多说,直接开摆客户端代码packagetest;importjava.io.*;importjava.ne... 查看详情

用网页实现断点续传(http)

...接操作2、服:使用ServerSocket.accept()方法进行阻塞,接收客户端请求3、服:每接收到一个Socket就建立一个新的线程来处理它4、客:利用Socket进行远程连接,询问已上传进度5、客:使用FileInputStream.skip(longlength)从指定位置读取文件... 查看详情

java中socket实现最简单的客户端与服务端通信(代码片段)

Java中Socket实现最简单的客户端与服务端通信引言:因为最近项目中要接入某通信协议接口,基于TCP/IP的socket接口。于是就在本地弄一个最简单的Socket通信仅供学习。话不多说,直接开摆客户端代码packagetest;importjava.io.*;importjava.ne... 查看详情

求超大文件上传方案(vue)

...接操作2、服:使用ServerSocket.accept()方法进行阻塞,接收客户端请求3、服:每接收到一个Socket就建立一个新的线程来处理它4、客:利用Socket进行远程连接,询问已上传进度5、客:使用FileInputStream.skip(longlength)从指定位置读取文件... 查看详情

java多线程实现文件上传(代码片段)

importjava.io.*;importjava.net.Socket;/*客户端:数据来自于文本文件,接收服务器反馈*/publicclassClientDemopublicstaticvoidmain(String[]args)throwsIOException//创建客户端Socket对象Sockets=newSocket("192.168.1.66",10000);//封装文本文件的数据Buf... 查看详情

tcp通信程序练习6——多线程实现文件上传(代码片段)

客户端代码:publicclassClientDemopublicstaticvoidmain(String[]args)throwsIOException//创建客户端Scoket对象Sockets=newSocket("192.168.50.76",44444);//封装文本文件数据BufferedReaderbr=newBufferedReader(newFileReader("myNe 查看详情

java大文件断点续传

...接操作2、服:使用ServerSocket.accept()方法进行阻塞,接收客户端请求3、服:每接收到一个Socket就建立一个新的线程来处理它4、客:利用Socket进行远程连接,询问已上传进度5、客: 查看详情

c#winform多线程socket文件上传,下载

一个S,服务器端N个C,客户端上传S随时监听端口,C发来上传文件请求后开始接收文件,如果网络中断,下次C再连接的时候,可以支持上一次文件断点续传下载S随时监听端口,C发来下载文件请求后开始发送文件,如果网络中断,... 查看详情

java网络编程----tdp进阶篇上传文本文件

设计需求:从客户端上传txt文件到服务器,服务端收到文件后,发送消息给客户端接收完成。1.服务器端:publicclassUpLoadFileServer{publicstaticvoidmain(String[]args)throwsException{ ServerSocketss=newServerSocket(10010); Sockets=ss.accept();BufferedRe 查看详情

java应用使用网络编程进行socket通信

...换的过程。网络编程可以帮助我们构建分布式系统,实现客户端与服务器之间的数据通信,以及实现点对点之间的通信等。1.2什么是socket通信Socket通信是网络编程中最常见的一种通信方式,它基于TCP/IP协议栈,通过网络建立两台... 查看详情

socket通信综合示例

...存到数据库,并提示数据库注册成功,请登录2用户登录客户端选择‘登录以后’后,提示输入用户名和密码,验证成功则提示上传文件,验证失败则给出提示信息,并可以重新登录3文件上传客户端输入上传文件的路径,并读取... 查看详情

java中的socket编程是作啥的

...哪方向的?需要掌握吗?Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一。如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的。本文会介绍一下基于TCP/IP的Socket编程,并且如何写... 查看详情

java系列讲座二:socket网络通信实现聊天软件项目讲解(udp)

    上一篇我们讲了通过TCP方式实现网络通信软件开发的原理,思路及实现,今天跟大家谈谈Socket通信中UDP方式通信的软件开发步骤及主要代码讲解,UDP实现方式实现的通信软件特点是不分客户端与服务器端,一个... 查看详情

java系列讲座二:socket网络通信实现聊天软件项目讲解(udp)

    上一篇我们讲了通过TCP方式实现网络通信软件开发的原理,思路及实现,今天跟大家谈谈Socket通信中UDP方式通信的软件开发步骤及主要代码讲解,UDP实现方式实现的通信软件特点是不分客户端与服务器端,一个... 查看详情

java使用socket实现通信

客户端程序packagecom.jun.client;importjava.io.*;importjava.net.Socket;importjava.util.Scanner;/***〈客户端程序〉<br>**@author未绪*@time2018/2/1612:42*/publicclassClientprivateSocketsocket;publicClient 查看详情

java是如何实现聊天功能的?

Java可以使用Socket编程实现聊天功能。Socket是一种网络通信协议,它可以在不同的主机之间传输数据。在聊天功能中,一般有客户端和服务器两个角色。客户端是发送消息的一方,它需要创建一个Socket对象,指定要连接的服务器... 查看详情

java多线程实现多客户端socket通信

一、服务端packagecom.czhappy.hello.socket;importjava.io.IOException;importjava.net.InetAddress;importjava.net.ServerSocket;importjava.net.Socket;publicclassServer{publicstaticvoidmain(String[]args){//创建Ser 查看详情

hadoop学习2

...录4.移动文件5.新建文件夹6.移除文件夹编写Java程序实现客户端和服务器端的socket信息交互以及函数调用实现机制RPC主要步骤如下:1.将本地socket以及接口类封装为一个proxy,生成动态本地代理实例。2.该实例调用相对应的函数并... 查看详情