java socket之上传文件
一、功能介绍
该功能主要实现,将客户端的:F:/work/socketSample/filetemp/client/test_client.txt上传到服务端F:/work/socketSample/filetemp/server/test_server.txt,并将test_client.txt名字修改为test_server.txt,如果服务端收到文件,则向客户端发送提示信息”文件已保存至服务器的F:/work/socketSample/filetemp/server/test_server.txt“
二、工程目录结构

三、服务端
1)Server,服务端主类,监听端口,有请求将开启处理子线程
package fileSockeServer; import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket; /**
* 基于TCP协议的Socket通信,实现文件传输-服务器端
*/
public class Server {
public static void main(String[] args) {
try {
// 创建一个服务器端的ServerSocket,绑定并监听9999端口
ServerSocket serverSocket = new ServerSocket(9999);
int count = 0;// 记录客户端的数量
System.out.println("服务器启动,等待客户端的连接。。。");
Socket socket = null;
while (true) {
// 循环监听等待客户端的连接
socket = serverSocket.accept();
// 每当一个客户端连接到服务器,服务器启动一个单独的线程处理与此客户端的通信
++count;
Thread serverHandleThread = new Thread(new ServerHandleThread(socket));
serverHandleThread.setPriority(4);// 设置线程的优先级[1,10],1为最低,默认是5
serverHandleThread.start();
System.out.println("上线的客户端有" + count + "个!");
InetAddress inetAddress = socket.getInetAddress();
System.out.println("当前客户端的IP地址是:"+ inetAddress.getHostAddress());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2)ServerHandleThread,对客户端的请求进行处理的子线程类
package fileSockeServer; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket; public class ServerHandleThread implements Runnable{ Socket socket = null;// 和本线程相关的Socket
public ServerHandleThread(Socket socket) {
super();
this.socket = socket;
}
// 响应客户端的请求
@Override
public void run() {
// TODO Auto-generated method stub
OutputStream os = null;
PrintWriter pw = null;
try {
InputStream is=socket.getInputStream();
// 要完成客户端文件上传到服务器的功能需要将客户机的文件通过FileInputStream进行读取,并包装成BufferedInputStream,
//将套接字的输出流包装成BufferedOutputStream,用BufferedInputStream中的read()方法读取文件中的数据,
//并用 BufferedOutputStream中的write()方法进行写入,这样文件就送入了Socket的输出流;
BufferedInputStream bufferedInputStream = new BufferedInputStream(is);// 将BufferedInputStream与套接字的输入流进行连接
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("F:/work/socketSample/filetemp/server/test_server.txt"));
byte[] buf=new byte[1024];
int len=0;
while((len=bufferedInputStream.read(buf))!=-1){
bufferedOutputStream.write(buf, 0, len);
}
//强行写入输出流,因为有些带缓冲区的输出流要缓冲区满的时候才输出
bufferedOutputStream.flush();// 刷新缓冲流
socket.shutdownInput();// 关闭输入流
os=socket.getOutputStream();
pw=new PrintWriter(os);
pw.println("文件已保存至服务器的F:/work/socketSample/filetemp/server/test_server.txt");
pw.flush();
socket.shutdownOutput();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
// 关闭相关资源
try {
if (pw != null) {
pw.close();
}
if (os != null) {
os.close();
}
if (socket != null) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} } }
四、客户端
1)Client,向服务端发送文件,如果收到服务的反馈信息,将信息打印输出
package fileSocketClient; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException; /**
* 基于TCP协议的Socket通信,实现文件传输-客户端
*/
public class Client {
public static void main(String[] args) {
try {
// 1.创建客户端的Socket,指定服务器的IP和端口
Socket socket = new Socket("127.0.0.1", 9999);
// 2.获取该Socket的输出流,用来向服务器发送文件
OutputStream os = socket.getOutputStream();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(os);// 将BufferedOutputStream与套接字的输出流进行连接
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("F:/work/socketSample/filetemp/client/test_client.txt"));// 读取客户机文件
byte[] buf = new byte[1024];
int len = 0;
while ((len = bufferedInputStream.read(buf)) != -1) {
bufferedOutputStream.write(buf, 0, len);// 向BufferedOutputStream中写入数据
}
bufferedOutputStream.flush();// 刷新缓冲流
socket.shutdownOutput();// 禁用此套接字的输出流 // 3.获取输入流,取得服务器的信息
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
while ((info = br.readLine()) != null) {
System.out.println("服务器端的信息:" + info);
}
socket.shutdownInput();// 禁用此套接字的输出流
// 4.关闭资源
os.close();
bufferedInputStream.close();
bufferedOutputStream.close();
is.close();
br.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
java socket之上传文件的更多相关文章
- Java工具之上传文件
4个代码 1.前端JSP 2.自定义异常类 3.文件上传抽象类 4.Servlet 1.JSP <%@ page contentType="text/html;charset=UTF- ...
- Java Web之上传文件
本篇文章你会学到 1. Apache FileUpload组件 2.上传文件保存的路径和名称问题 3.缓存大小和临时目录 4.控制文件上传的格式 先讲一个简单的例子,一个注册页面,有账号,邮箱,和头像 ...
- PHP socket上传文件图片
最近了解了下下socket方面的东西,想做一个socket上传文件的例子. 在网上搜了搜代码执行后,图片数据传输了一半,图片的下半部分是灰色的.然后就自己仿着搜来的代码和php.net 中socket ...
- php 利用socket上传文件
php 利用socket上传文件 张映 发表于 2010-06-02 分类目录: php 一,利用fsockopen来上传文件 以前我写过一篇关于socket通信原理的博文http://blog.51 ...
- Java ftp上传文件方法效率对比
Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...
- java socket通信-传输文件图片--传输图片
ClientTcpSend.java client发送类 package com.yjf.test; import java.io.DataOutputStream; import java.io ...
- java 后台上传文件
java 后台上传文件 public static String uploadFile(File file, String RequestURL) throws IOException { Strin ...
- Java+Selenium 上传文件,点击选择“浏览文件”按钮,报错invalid argument
Java+Selenium 上传文件,点击选择"浏览文件"按钮,报错invalid argument 解决代码: Actions action=new Actions(driver ...
- Java ftp 上传文件和下载文件
今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...
随机推荐
- 【git】日志提交规范
我自己总结的规范: feature: 功能添加bugfix: bug修复change: 调整,比如配置,某些方法替换等optimize: 优化过程doc: 文档变更refactor: 重构,功能不变t ...
- TCP/IP中的四元组、五元组、七元组
四元组:源IP地址.目的IP地址.源端口.目的端口 五元组:源IP地址.目的IP地址.源端口.目的端口.传输层协议 七元组:源IP地址.目的IP地址.源端口.目的端口.传输层协议,服务类型以及接口索引
- echarts中国地图坐标弹框
echarts链接:http://gallery.echartsjs.com/editor.html?c=xHkdOlpwWz 代码: var geoCoordMap = { '上海': [121.4 ...
- 记录css的常用属性
background-color:背景颜色 color:字体颜色 text-align:标签内容的位置 margin-left:左外边距 font-size:字体大小 font_family:字体格式 ...
- spring/spirng boot添加fluent日志-aop
此项目以aop的形式添加fluent 日志 sample介绍 spring-mvc-aop-helloworld 为spring mvc aop condition toolcommontest 为s ...
- Atom打开txt文件中文乱码解决、指定文件的语法格式、win10中禁止睡眠
1.Atom中文乱码解决 首先保证打开的txt文件的编码格式为UTF-8无BOM编码格式,可以使用Notepad++更改,如下图所示: 然后再在atom中打开文件,并右键点击文件内容的任意位置,Cha ...
- 为什么CPU的主频止步于4GHz?
你对CPU的认识大概还停留在奔腾4年代吧……奔腾4最终止步于3.8GHz,原计划推出的4GHz奔腾4处理器也被胎死腹中.英特尔意识到处理器研发道路上走入了“唯主频论”的误区,2004年10月,英特尔总 ...
- 20172306《Java程序设计与数据结构》第八周学习总结
20172306<Java程序设计>第8周学习总结 教材学习内容总结 第十章最开始自己看的时候,没怎么看懂,等老师讲完之后,又看了一遍,就理解了很多.第十章主要学习了以下几点: 1.对于几 ...
- Java时代即将来临
Java语言开发成型的时候有一个构想:就是智能设备互联,笔者推断这个时代即将来临. 我们看看信息时代经历的几个阶段: 机械设备阶段--以算盘.机械式计算机为代表的萌芽阶段. 电子管计算机阶段--以简单 ...
- keepalived+nginx+tomcat+redis集群环境部署
1.所需软件.jar包.配置文件下载:http://pan.baidu.com/s/1dFgntst 2.环境说明: centos6.5 64位 主节点:192.168.40.121 副节点:192 ...