- 浏览: 289392 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chenchangqun:
这段示例代码没有客户端 没法实验
Java NIO原理和使用 -
congjl2002:
误,整理好了在发phk070832 写道垃圾代码,一大推的编译 ...
snmp trap的接收(jdmk方式) -
phk070832:
垃圾代码,一大推的编译错误,整理好了在发表吧。
snmp trap的接收(jdmk方式) -
zhangcctao:
我也遇到线程池的内存溢出问题。。不知道是不是这个原因呀?
多线程中使用静态方法 -
新入职:
分享了,这个eclise版本有没有讲究?我的3.3的可以么
windows下安装android及eclipse配置
最近看到些文件传输的例子,感觉有代码有注释的,就转过来了,虽然是老代码,但也可作为参考。
1.服务器端
public class ServerTest { int port = 8821; void start() { Socket s = null; try { ServerSocket ss = new ServerSocket(port); while (true) { // 选择进行传输的文件 String filePath = "D:\\lib.rar"; File fi = new File(filePath); System.out.println("文件长度:" + (int) fi.length()); // public Socket accept() throws // IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。 s = ss.accept(); System.out.println("建立socket链接"); DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream())); dis.readByte(); DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath))); DataOutputStream ps = new DataOutputStream(s.getOutputStream()); //将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java 4th里有现成的代码。 ps.writeUTF(fi.getName()); ps.flush(); ps.writeLong((long) fi.length()); ps.flush(); int bufferSize = 8192; byte[] buf = new byte[bufferSize]; while (true) { int read = 0; if (fis != null) { read = fis.read(buf); } if (read == -1) { break; } ps.write(buf, 0, read); } ps.flush(); // 注意关闭socket链接哦,不然客户端会等待server的数据过来, // 直到socket超时,导致数据不完整。 fis.close(); s.close(); System.out.println("文件传输完成"); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String arg[]) { new ServerTest().start(); } }
2.socket的Util辅助类
public class ClientSocket { private String ip; private int port; private Socket socket = null; DataOutputStream out = null; DataInputStream getMessageStream = null; public ClientSocket(String ip, int port) { this.ip = ip; this.port = port; } /** *//** * 创建socket连接 * * @throws Exception * exception */ public void CreateConnection() throws Exception { try { socket = new Socket(ip, port); } catch (Exception e) { e.printStackTrace(); if (socket != null) socket.close(); throw e; } finally { } } public void sendMessage(String sendMessage) throws Exception { try { out = new DataOutputStream(socket.getOutputStream()); if (sendMessage.equals("Windows")) { out.writeByte(0x1); out.flush(); return; } if (sendMessage.equals("Unix")) { out.writeByte(0x2); out.flush(); return; } if (sendMessage.equals("Linux")) { out.writeByte(0x3); out.flush(); } else { out.writeUTF(sendMessage); out.flush(); } } catch (Exception e) { e.printStackTrace(); if (out != null) out.close(); throw e; } finally { } } public DataInputStream getMessageStream() throws Exception { try { getMessageStream = new DataInputStream(new BufferedInputStream(socket.getInputStream())); return getMessageStream; } catch (Exception e) { e.printStackTrace(); if (getMessageStream != null) getMessageStream.close(); throw e; } finally { } } public void shutDownConnection() { try { if (out != null) out.close(); if (getMessageStream != null) getMessageStream.close(); if (socket != null) socket.close(); } catch (Exception e) { } } }
3.客户端
public class ClientTest { private ClientSocket cs = null; private String ip = "localhost";// 设置成服务器IP private int port = 8821; private String sendMessage = "Windwos"; public ClientTest() { try { if (createConnection()) { sendMessage(); getMessage(); } } catch (Exception ex) { ex.printStackTrace(); } } private boolean createConnection() { cs = new ClientSocket(ip, port); try { cs.CreateConnection(); System.out.print("连接服务器成功!" + "\n"); return true; } catch (Exception e) { System.out.print("连接服务器失败!" + "\n"); return false; } } private void sendMessage() { if (cs == null) return; try { cs.sendMessage(sendMessage); } catch (Exception e) { System.out.print("发送消息失败!" + "\n"); } } private void getMessage() { if (cs == null) return; DataInputStream inputStream = null; try { inputStream = cs.getMessageStream(); } catch (Exception e) { System.out.print("接收消息缓存错误\n"); return; } try { //本地保存路径,文件名会自动从服务器端继承而来。 String savePath = "E:\\"; int bufferSize = 8192; byte[] buf = new byte[bufferSize]; int passedlen = 0; long len=0; savePath += inputStream.readUTF(); DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath)))); len = inputStream.readLong(); System.out.println("文件的长度为:" + len + "\n"); System.out.println("开始接收文件!" + "\n"); while (true) { int read = 0; if (inputStream != null) { read = inputStream.read(buf); } passedlen += read; if (read == -1) { break; } //下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比 System.out.println("文件接收了" + (passedlen * 100/ len) + "%\n"); fileOut.write(buf, 0, read); } System.out.println("接收完成,文件存为" + savePath + "\n"); fileOut.close(); } catch (Exception e) { System.out.println("接收消息错误" + "\n"); return; } } public static void main(String arg[]) { new ClientTest(); } }
这里实现的是从服务器端向客户端发送文件的过程。
发表评论
-
java阻塞队列学习(转帖)
2010-06-06 11:50 3467import java.util.concurrent.Arr ... -
httpclient链接关闭问题(转帖)
2010-03-11 22:09 2128HttpClient client = new HttpCli ... -
J2EE集群原理(转贴)
2010-03-09 19:57 1211J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念: ... -
Spring 实现ibatis事务回滚
2010-03-05 20:34 3630网上发现这篇文章,转过来学习一下,好不好用还没有实践,需要自己 ... -
java 可变参数
2009-12-14 20:50 14120vararg的意思是变量参数,它是与Jav ... -
java中的string
2009-11-25 14:45 1302从javaeye的论坛里看到这 ... -
使用JDBC对BLOB和CLOB进行处理
2009-11-12 20:33 4844从网上看到这篇文章,转过来做为学习用 设有表:create ... -
避免或最小化 Servlet 中的同步
2009-09-24 21:02 970servlet 是多线程的。基于 servlet 的应用程序必 ... -
httpclient 使用小记
2009-09-03 21:05 3374最近学习apache的httpclient 在使用postm ... -
httpclient 学习笔记
2009-08-23 16:52 1525前阵子,学习了一下APACHE 的httpclient,感觉h ... -
log4j使用
2009-06-19 21:08 1545从网上看到得,发现写 ... -
java虚拟机的一些概念
2009-05-24 10:22 1334从网上看到这篇文章,感觉适合初学jvm,就转来作为以后学习参考 ... -
xmlbean 生成带包路径的jar
2009-05-23 23:12 3278因为使用xmlbean生成 ... -
多线程中使用静态方法
2009-05-14 19:54 6630终于把内存泄漏问题解决了,不是多线程访问静态函数的问题,事实证 ... -
java Annotation入门
2009-04-16 21:22 1238因为偶然的原因需要使用Annotation,所以从网上找了这篇 ... -
MINA2.0简单使用
2009-04-12 16:12 5132一直知道MINA是apache 开发的一个开发socket编程 ... -
log4j参数配置说明
2009-03-22 20:31 1999前几天用到log4j,到网上查了一下他的参数配置,发现还是比较 ... -
portal之SSO开发文档
2009-03-02 20:12 4052前两天看到别人写的,感觉不错,就转了过来做为参考 ... -
cas在tomcat中的配置
2009-02-25 21:22 2819cas在tomcat上配置时,需要打开tomc ... -
SSO 原理浅谈
2009-02-25 19:41 2106SSO 是一个非常大的主题,我对这个主题有着深深的感受,自从 ...
相关推荐
Java基于Socket文件传输示例Java基于Socket文件传输示例Java基于Socket文件传输示例
Java基于Socket文件传输示例.chm
Java基于Socket的文件传输是一种常见的网络通信方式,它允许客户端和服务器之间交换文件。在这个示例中,我们将探讨如何在Java中实现一个简单的文件传输服务,包括服务器端和客户端的实现。 首先,让我们分析服务器...
在Java编程中,Socket是网络...总的来说,Java基于Socket实现文件传输涉及到网络编程的基础知识,包括套接字的创建、I/O流的使用以及并发控制等。理解和掌握这部分内容对于开发涉及网络通信的Java应用是非常重要的。
本文将深入探讨基于Java和Socket技术的文件传输原理,并通过一个实际示例,帮助读者理解如何利用Java进行高效的文件传输。 #### Java文件传输的核心技术:Socket **Socket**(套接字)是网络通信的基础组件,它...
在这个示例中,我们探讨的是如何使用Java的Socket API进行文件的网络传输。文件传输通常涉及多个步骤,包括建立连接、数据读取、数据发送以及断开连接。 首先,服务器端程序创建了一个`ServerSocket`实例,监听特定...
本示例将详细介绍如何在Android平台上使用Java Socket进行文件传输。 首先,我们需要创建一个服务器端(Server)来监听和接收连接请求。在提供的文件`Server.java`中,通常会包含以下步骤: 1. 导入必要的库,如`...
Java Socket 大文件传输是网络编程中的一个关键领域,它涉及到高效的数据传输、包的分片与组装,以及网络协议的选择。在这个场景下,我们通常会用到TCP和UDP这两种传输层协议,以及Java的非阻塞I/O(NIO)技术。下面...
Java基于Socket的文件发送与接收是一个常见的网络编程任务,它涉及到客户端和服务器之间的通信,以及大数据量的传输。在本项目中,开发者为用户提供了一个图形用户界面(GUI),并且在传输过程中显示了进度条,这...
在这个"Java socket文件传输实例"中,我们将深入探讨如何使用Java的Socket类进行文件的发送和接收,这对于理解网络编程的基本原理以及在实际应用中构建文件共享系统至关重要。 首先,Java Socket是基于TCP/IP协议的...
文件传输基于Socket的核心在于将文件拆分成字节流,通过Socket的输入/输出流进行传输。首先,服务端需要读取文件并将其转换为字节流,然后通过Socket的OutputStream发送。客户端接收时,通过Socket的InputStream读取...
在Android平台上,Socket文件传输是一种常见的通信方式,尤其适用于设备间的文件共享,即使涉及的是大文件,如几十兆(MB)的数据。本文将深入探讨如何使用Android的Socket进行文件传输,以及实现过程中需要注意的关键...
根据提供的文件信息,本文将详细解析Java中利用Socket进行文件(包括图片)传输的相关知识点。 ### Java Socket基础知识 在深入探讨文件传输之前,我们先简要回顾一下Java Socket的基础概念。Socket是一种允许不同...
在这个“Socket文件传输源码”中,我们很显然会看到如何使用Java的Socket类来实现在两个应用程序之间传输文件。以下是对这个主题的详细说明: 首先,我们要了解Socket的基本概念。Socket在计算机网络中扮演着桥梁的...
这个"文件传输TCP例子"源码将涵盖以上提到的关键步骤,并提供一个实际的示例来演示如何在Linux环境下实现TCP文件传输。通过阅读和分析源码,你可以深入理解TCP socket编程的细节,这对于开发网络应用程序,特别是...