java模拟TCP通信实现客户端上传文件到服务器端
作者:良睿 发布时间:2023-11-26 10:14:49
标签:java,上传文件
java模拟TCP通信实现客户端上传文件到服务器端,供大家参考,具体内容如下
客户端
package com.zr;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
/*
客户端
*/
public class TCPClient {
public static void main(String[] args) throws IOException {
//创建客户端,ip地址:127.0.0.1,端口号:8888
Socket socket=new Socket("127.0.0.1",8888);
//创建客户端本地输入流,从客户本地获取要上传的文件
FileInputStream fis=new FileInputStream("timg.jpg");
//获取网络输出字节流,从而向服务器端发送数据
OutputStream os = socket.getOutputStream();
int len=0;
byte[] bytes=new byte[1024];
while ((len=fis.read(bytes))!=-1){
//向服务器端发送文件
os.write(bytes,0,len);
}
//关闭客户端输出流,中断上传
socket.shutdownOutput();
//获取网络字节输入流,从而获取服务器端传来的数据
InputStream is = socket.getInputStream();
while ((len=is.read(bytes))!=-1){
//输出从服务器端获取的数据:“上传成功”
System.out.println(new String(bytes,0,len));
}
//关闭客户端
socket.close();
}
}
服务器端
package com.zr;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
服务器端
*/
public class TCPServer {
public static void main(String[] args) throws IOException {
//创建服务器端,端口号:8888
ServerSocket serverSocket=new ServerSocket(8888);
while (true){
//获取客户端对象
Socket socket=serverSocket.accept();
//创建服务器端输出流,从而把从客户端获得的文件保存到服务器本地,并且重新命名
FileOutputStream fos=new FileOutputStream("upload"+System.currentTimeMillis()+".jpg");
//获取网络输出字节流,从而向客户端发送数据
InputStream inputStream = socket.getInputStream();
int len=0;
byte[] bytes=new byte[1024];
while ((len=inputStream.read(bytes))!=-1){
//保存从客户端收到的文件
fos.write(bytes,0,len);
}
//获取网络输出字节流,从而向客户端发送数据
OutputStream outputStream = socket.getOutputStream();
//向客户端发送信息:“上传成功”
outputStream.write("上传成功".getBytes());
//关闭客户端
socket.close();
}
}
}
来源:https://blog.csdn.net/liangruilz/article/details/89972650


猜你喜欢
- TabLayout和ViewPager搭配使用,是有很多方便性,但是TabLayout这东西还是有很多被人吐槽的地方。这里只讲怎么设置tab
- null与voidnull值用来表示数据类型未被赋予任何值,它是一种引用类型;void表示没有类型,或者说是没有任何值。null与void的
- spring-MVC实现简单的登录功能,供大家参考,具体内容如下今天我学习了spring-MVC实现简单的登录功能,本篇博客就讲解如何使用s
- 本文实例讲述了C#操作CSV文件类。分享给大家供大家参考。具体分析如下:这个C#类用于转换DataTable为CSV文件、CSV文件转换成D
- 前言最近在用 MVP + RxJava + Retrofit 写项目,觉得相对于其他的开发框架,这的确是给我们带来了很多方便,但是在网上搜寻
- 本文实例为大家分享了Android实现注册界面的具体代码,供大家参考,具体内容如下LinearLayout 控制布局TextView 用于显
- 强指针和弱指针基础android中的智能指针包括:轻量级指针、强指针、弱指针。强指针:它主要是通过强引用计数来进行维护对象的生命周期。弱指针
- 在上一篇文章中完成了 《Maven镜像地址大全 》,后来又花了时间又去收集并整理了关于 maven 远程仓库地址,并整理于此,关于 Mave
- 1. 简介很早就听说了Google的Lifecycle组件,因为项目没有使用过,所以并没有过多的接触。不过最近看到了一篇文章,其中的一条评论
- 提示:建议一定要看后面的@RequestBody的核心逻辑源码以及六个重要结论!本文前半部分的内容都是一些基本知识常识,可选择性跳过。声明:
- Java 队列实现原理“队列”这个单词是英国人说的“排”。在英国“排队”的意思就是站到一排当中去。计算机科学中,队列是一种数据结构,有点类似
- 这篇文章主要介绍了springboot配置文件绑定实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 一、@RestController 注解在 Spring Boot 中的 Controller 中使用 @RestController 注解
- 第1部分 List概括List的框架图List 是一个接口,它继承于Collection的接口。它代表着有序的队列。AbstractList
- 话不多说,请看实例代码String ip = request.getHeader("x-forwarded-for");
- 学习Java 本身是一个挺枯燥的过程,说白了就是每天敲代码而已。但如果换一种思路,可以编写各种各样的程序,不仅加深对代码的理解,同时提高兴趣
- spring validation多层对象校验1、第一层对象定义import java.io.Serializable; import ja
- 1.监听(Listener)<!-- 配置监听 --><listener><listener-class>
- 简介本文主要介绍如何使用java代码利用Selenium操作浏览器,某些网页元素加载慢,如何操作元素就会把找不到元素的异常,此时需要设置元素
- 一、前言数据导出为Excel在我们写项目的过程中经常用到需要用到的jar包 poi-3.17.jar 二、具体实现步骤//第一步创建一个we