- 浏览: 141811 次
- 性别:
- 来自: 北京
最新评论
-
yuhui136126:
我试了下好像不弹出选择时间这个,能帮忙是什么原因吗?
android日期控件显示 -
god_sky:
当月的最后一天减去当月的第一天就是当月的天数
日期的操作 -
wang492239163:
请问获取当前月的所有天怎么办
日期的操作
1.建一个java项目作为客服端
2.建一个wed项目作为服务器端
3.在TomCat启动时启动服务
以下代码作为实例,有一些bug请自行调试
//服务器
package com.sky.socket.servce;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
/*
* Tomcat 启动时就启动服务
*
*/
public class SocketServlet extends HttpServlet {
/*
* 构造函数
*/
public SocketServlet() {
super();
}
/*
* 初始化
*/
public void init() throws ServletException {
System.out.println("-----------------开始启动服务-----------------");
UploadServce.getInstance().start();
DownloadServce.getInstance().start();
System.out.println("-----------------启动服务成功-----------------");
}
/*
* 销毁
*/
public void destroy() {
}
}
//wen.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>socketservce</display-name>
<servlet>
<!-- TomCat启动时启动服务 -->
<servlet-name>socketServlet</servlet-name>
<servlet-class>com.sky.socket.servce.SocketServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
//工具类
package com.sky.socket.client;
import java.net.*;
import java.io.*;
//socket的Util辅助类
public class ClientTools {
private String ip;
private int port;
private Socket socket = null;
DataOutputStream out = null;
DataInputStream getMessageStream = null;
int n;
byte b[] = new byte[102400];
public ClientTools(String ip, int port) {
this.ip = ip;
this.port = port;
}
/** */
/**
* 创建socket连接
*
* @throws Exception
* exception
*/
public boolean CreateConnection() throws Exception {
boolean falg=false;
try {
socket = new Socket(ip, port);
System.out.println("连接成功!!!");
falg=true;
} catch (Exception e) {
e.printStackTrace();
if (socket != null)
socket.close();
throw e;
}
return falg;
}
/**
* 往服务器发送数据
*/
public void sendMessage(String sendMessage,InputStream input) throws Exception {
try {
out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(sendMessage);
if(input!=null){
while((n=input.read(b,0,8192))!=-1){
out.write(b,0,n);
}
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
if (out != null) {
out.close();
}
throw e;
} finally {
}
}
/**
* 从服务器得到数据流并保存到本地目录
*/
public boolean getMessageStream(String savePath) throws Exception {
boolean falg=false;
String fileName;
try {
getMessageStream= new DataInputStream(socket.getInputStream());
fileName=getMessageStream.readUTF();
out= new DataOutputStream(new FileOutputStream(new File(savePath+File.separator+fileName)));
out.writeUTF(fileName);
while((n=getMessageStream.read(b,0,8192))!=-1){
out.write(b,0,n);
}
out.flush();
falg=true;
} catch (Exception e) {
e.printStackTrace();
if (getMessageStream != null){
getMessageStream.close();
out.close();
}
throw e;
}
return falg;
}
/**
* 断开socket连接
*/
public void shutDownConnection() {
try {
if (out != null)
out.close();
if (getMessageStream != null)
getMessageStream.close();
if (socket != null)
socket.close();
} catch (Exception e) {
}
}
}
//客服端
package com.sky.socket.client;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
//客服端
public class MyButton extends JFrame {
/**
* @param args
*/
public JButton send;
public JButton down;
public JPanel panel;
public MyButton() {
panel = new JPanel();
panel.setLayout(null);
this.add(panel);
send = new JButton("上传");
send.setBounds(20, 30, 60, 40);
ButtonEvent butEvent = new ButtonEvent();
send.addActionListener(butEvent);
panel.add(send);
down = new JButton("下载");
down.setBounds(100, 30, 60, 40);
ButtonDown butDown = new ButtonDown();
down.addActionListener(butDown);
panel.add(down);
}
/*
* 文件上传
*/
public class ButtonEvent implements ActionListener {
public void actionPerformed(ActionEvent e4) {
System.out.println("-----------文件上传开始--------------");
String ip="127.0.0.1";
int port=8889;
//创建连接
ClientTools clientTools=new ClientTools(ip, port);
try {
if(clientTools.CreateConnection()){
//选择上传文件
JFileChooser fileChooser = new JFileChooser();
int i = fileChooser.showOpenDialog(MyButton.this);// 1表示取消上传,0确定上传
if (i == JFileChooser.APPROVE_OPTION) {
String filePath = fileChooser.getSelectedFile().getAbsolutePath();
File file=new File(filePath);
FileInputStream input = new FileInputStream(file);
//发送数据
clientTools.sendMessage(file.getName(), input);
}
System.out.println("------------连接成功-------------");
}
System.out.println("------------发送数据成功-------------");
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭连接
System.out.println("-------------关闭连接-----------");
clientTools.shutDownConnection();
}
System.out.println("-----------文件上传结束--------------");
}
}
/*
* 文件下载
*/
public class ButtonDown implements ActionListener {
public void actionPerformed(ActionEvent e4) {
System.out.println("-----------文件下载开始--------------");
String ip="127.0.0.1";
int port=8899;
//创建连接
ClientTools clientTools=new ClientTools(ip, port);
try {
if(clientTools.CreateConnection()){
System.out.println("------------连接成功-------------");
//通知服务器我要下载那个文件告诉服务器
clientTools.sendMessage("E://2011-08-26//123.txt", null);
//选择保存文件的路径
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int i = fileChooser.showSaveDialog(MyButton.this);// 1表示取消上传,0确定上传
if (i == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
// 本地保存路径,文件名会自动从服务器端继承而来。
String savePath = file.getAbsolutePath();
if(clientTools.getMessageStream(savePath)){
System.out.println("下载数据成功");
}else{
System.out.println("下载数据失败");
}
}
}
System.out.println("------------接收数据成功-------------");
} catch (Exception e) {
e.printStackTrace();
}finally {
//关闭连接
System.out.println("-------------关闭连接-----------");
clientTools.shutDownConnection();
}
System.out.println("-----------文件下载结束--------------");
}
}
public static void main(String[] args) {
MyButton mybtn = new MyButton();
mybtn.setSize(200, 120);
mybtn.setVisible(true);
mybtn.setLocation(300, 220);
mybtn.setTitle("socket文件的上传下载");
mybtn.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//上传服务器
package com.sky.socket.servce;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
* 和客服端建立练级
*/
public class UploadServce implements Runnable {
private final static int port = 8889;
public static UploadServce uploadservce = null;
public boolean running = false;
protected UploadServce() {
super();
}
public void start() {
if (!running) {
running = true;
(new Thread(this)).start();
}
}
/*
* 实例化
*/
public static UploadServce getInstance() {
if (uploadservce == null) {
uploadservce = new UploadServce();
}
return uploadservce;
}
public void run() {
ServerSocket server = null;
Socket skt = null;
try {
server = new ServerSocket(port);
} catch (IOException ex) {
System.out.println("建里服务器:" + ex.getMessage());
}
while (true) {
try {
skt = server.accept();
} catch (IOException ee) {
System.out.println("正在等待客户:" + ee.getMessage());
}
if (skt != null)
new Server_Thread(skt).start();
else
continue;
}
}
}
/*
* 和客户端进行通信
*/
class Server_Thread extends Thread {
Socket socket = null;
DataInputStream dataInput = null;
DataOutputStream dataOutput=null;
String filename = null;
Server_Thread(Socket skt) {
socket = skt;
try {
/*
* socket获取输入流
*/
dataInput = new DataInputStream(socket.getInputStream());
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void run() {
while (true) {
int n;
byte b[] = new byte[8192];
try {//流中读取文件名
filename = dataInput.readUTF();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
String path=sdf.format(new Date());
String filePath = "E:"+ File.separator+path;
File file = new File(filePath);
if (file.exists()) {
file.delete();
} else {
file.mkdirs();
}
String fileFullPath = filePath + File.separator + filename;
// 文件路径
dataOutput=new DataOutputStream(new FileOutputStream(fileFullPath));
while ((n = dataInput.read(b, 0, 8192)) != -1) {
dataOutput.write(b, 0, n);
System.out.println("正在上传数据!!!");
}
System.out.println("保存的文件路径为:"+fileFullPath);
System.out.println("写入完毕!");
dataInput.close();
dataOutput.close();
socket.close();
break;
} catch (Exception ee) {
break;
}
}
}
}
//下载的服务器类
package com.sky.socket.servce;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class DownloadServce implements Runnable {
private final static int port = 8899;
public static DownloadServce downloadservce = null;
public boolean running = false;
protected DownloadServce() {
super();
}
public static DownloadServce getInstance() {
if (downloadservce == null) {
downloadservce = new DownloadServce();
}
return downloadservce;
}
public void start() {
if (!running) {
running = true;
(new Thread(this)).start();
}
}
public void run() {
ServerSocket server = null;
Socket you = null;
try {
server = new ServerSocket(port);
} catch (IOException ex) {
System.out.println("建里服务器:" + ex.getMessage());
}
while (true) {
try {
you = server.accept();
} catch (IOException ee) {
System.out.println("正在等待客户:" + ee.getMessage());
}
if (you != null){
new DownServer_Thread(you).start();
}else{
continue;
}
}
}
}
class DownServer_Thread extends Thread {
Socket socket = null;
DataInputStream in = null;
String filename = null;
DownServer_Thread(Socket c) {
socket = c;
try {
in = new DataInputStream(socket.getInputStream());
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void run() {
while (true) {
System.out.println("建立socket链接");
//要下载的文件
DataInputStream dis = null;
String filename = null;
DataInputStream fis = null;
DataOutputStream ps = null;
// 将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java
// 4th里有现成的代码。
try {
//socket中获取要下载的文件名
dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
filename = dis.readUTF();
//下载的文件路径
String filePath =File.separator+filename;
System.out.println("下载文件路径================="+filePath);
File fi = new File(filename);
//把要下载的文件放入流中
fis = new DataInputStream(new BufferedInputStream(new FileInputStream(fi)));
//socket中获取输出流
ps = new DataOutputStream(socket.getOutputStream());
ps.writeUTF(fi.getName());
int bufferSize = 8192;//8192
byte[] buf = new byte[bufferSize];
int n=0;
while((n=fis.read(buf,0,8192))!=-1){
System.out.println("正在数据...");
ps.write(buf,0,n);
}
// 注意关闭socket链接哦,不然客户端会等待server的数据过来,
// 直到socket超时,导致数据不完整。
ps.close();
fis.close();
// dis.close();
// socket.close();
System.out.println("文件传输完成");
break;
} catch (IOException e) {
e.printStackTrace();
break;
} catch (Exception e) {
e.printStackTrace();
break;
}
}
}
}
- HttpClient文件上传与Servlet处理上传文件.rar (1.3 MB)
- 下载次数: 54
- HttpClient文件上传与Servlet处理上传文件.rar (1.3 MB)
- 下载次数: 29
发表评论
-
java Timer实现定时器
2012-05-14 16:16 1306/* * 文件名:MyTask.java */ impo ... -
Applet数字签名
2012-05-08 13:55 2007Applet数字签名 我用applet做了一个文件的上传和下 ... -
得到中文首字母
2012-05-02 16:27 1069package com.pxl.client.ppm.pm; ... -
java比较字符串的匹配度
2012-04-19 14:58 2193引用:http://www.jiaojingkuan.com/ ... -
本地目录拒绝访问
2012-04-26 16:46 1855我用一个文件的上传在本机上什么错也不报,放在服务器上就报一下在 ... -
在JTable中添加下拉和复选框
2012-02-07 16:43 9479package com.sky.swing; import ... -
cookie简单登录实例
2012-01-16 15:26 1527(1)登录页面 <!DOCTYPE html PUBL ... -
TomCat域名绑定与虚拟目录设置
2012-01-16 14:45 1336TomCat域名绑定与虚拟目录设置 Windows下可以通过 ... -
ArrayList、Vector和LinkedList
2011-12-19 23:07 1966package com.sky.arrayset;//Arra ... -
java 运算符
2011-12-11 21:05 1118package com.sky.basic; public ... -
日期的操作
2011-11-17 17:43 1253package com.sky.date; import j ... -
Hashset HashMap和Hashtable 实例
2011-11-12 22:57 1362package com.sky.collection; im ... -
mysql 完全备份
2011-10-20 17:42 1384//mysql 完全备份实现类 package com.sk ... -
eclipse 反编译工具下载
2011-09-21 15:31 1686JadClipse Eclipse Plugin for Ec ... -
启动tomcat 一闪而过
2011-09-21 10:57 920这是因为JAVA_HOME没有配置好 ... -
Http+Servlet 文件上传下载
2011-09-02 13:27 1817//客户端界面package com.sky.client.f ... -
Swing 界面的最大化和最小化
2011-08-23 10:57 16831.设置窗口最大(伪最大化) JFrame frame ... -
Tomcat启动时自动加载Servlet
2011-08-05 14:43 3369[align=center][size=small][/siz ... -
文件输出比较
2011-07-23 08:31 837package com.sky.java.file; imp ... -
SmartUpload上传文件名乱码
2011-07-19 10:43 3816使用jspsmart上传文件很 ...
相关推荐
### Socket 实现文件上传下载详解 #### 一、引言 在互联网开发中,文件的上传与下载是非常常见的功能需求之一。使用 Socket 进行文件的传输是一种非常基础且高效的方式。本文将详细介绍如何利用 Java 的 Socket ...
在本示例中,"Socket实现文件上传下载,含多线程" 提到了通过Socket在客户端和服务器之间进行文件传输,并且服务器端采用了多线程处理连接请求,提高了服务的并发能力。下面我们将详细探讨相关的知识点。 1. **...
Socket提供了一种可靠的、基于连接的传输层通信机制,适用于文件的上传和下载。本篇将详细讲解如何在Android应用中使用Socket进行文件的上传和下载操作。 首先,理解Socket的基本概念:Socket是应用程序与网络协议...
本示例中的"socket文件上传代码"是一种使用Java语言通过Socket协议实现在不同服务器间上传文件的技术。Socket,又称为套接字,是网络编程中进程间通信(IPC)的一种方式,尤其适用于跨网络的客户端-服务器架构。 ...
在这个场景中,我们讨论的是如何使用Java的Socket来实现文件上传功能,即从客户端将文件发送到服务器,然后保存到服务器的数据库中。这个过程涉及到多个关键知识点,下面我们将详细探讨。 1. **Java Socket基础**:...
三、Socket文件上传工具类设计 1. 客户端: - 创建Socket连接:`Socket socket = new Socket(serverIP, serverPort);` - 打开本地文件:`FileInputStream fis = new FileInputStream(file);` - 发送文件:通过...
局域网socket文件传输(c#) 局域网socket文件传输(c#)
本项目“c语言socket文件上传”旨在利用Linux环境,通过FTP(File Transfer Protocol)协议来实现文件的上传功能。以下是这个项目涉及的关键知识点: 1. **C语言基础**:C语言是一种强大的、低级别的编程语言,常...
在Linux系统中,自己编写基于Socket的上传下载程序是一项具有挑战性的任务,它涉及到网络编程、文件处理以及进程间通信等多个领域。这个程序利用Socket接口实现了TCP协议的客户端和服务端功能,用户可以通过客户端...
Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-...
Socket网络编程是网络通信的基础,尤其在开发涉及服务器与客户端交互的应用时,如文件上传和下载功能。在这个场景中,我们将深入探讨如何使用Java的Socket API实现文件的上传和下载功能。 TCP(Transmission ...
C# 基于TCP SOCKET通信 可点对点聊天 上传文件 下载文件 有进度条可查看文件传输的进度 以及文件传输的速度
FTPUtil.vb是一个VB.NET编写的实用工具,它利用Socket编程接口实现了FTP(File Transfer Protocol)文件上传和下载的功能。FTP是一种广泛应用于互联网上的协议,主要用于在客户端与服务器之间进行文件传输。Socket是...
在iOS移动端开发中,Socket通信是一种基础且强大的网络通信方式,尤其在文件上传和下载的场景下,其灵活性和高效性被广泛运用。Socket通信基于TCP/IP协议,允许应用程序通过网络进行双向通信,实现了设备间的直接...
本资源"基于Socket上传下载文件VS2010Demo"是针对C++开发者设计的一个实例,它演示了如何利用Socket在Visual Studio 2010环境下实现文件的上传和下载功能。下面将详细介绍相关知识点。 首先,Socket是网络通信中的...
在这种场景下,使用Socket进行大文件的断点上传是一种常见且有效的解决方案。本文将深入探讨如何在Android源码中实现Socket大文件的断点上传功能。 1. **Socket基础知识**: - Socket是网络通信中的一个概念,它为...
本篇将详细讲解如何在Android应用中实现基于Socket方式的文件上传,以及解决在此过程中可能遇到的问题。 首先,理解Socket通信的基本原理是必要的。Socket是网络编程中的一个概念,它为两台计算机之间建立了一条...
在这个场景中,我们讨论的是使用Java Socket实现一个无界面的文件上传功能,即客户端将文件发送到服务器,服务器接收并存储文件。下面将详细阐述这个过程中的关键知识点。 1. **Socket编程基础**: Java Socket ...
C++语言开发文件传输服务,使用C#的客户端上传文件,均采用socket。 服务端在windowXp上可以测试可以使用 http://blog.csdn.net/dacong/article/details/79245614