首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>Java基础>正文

一个基于Java Socket实现文件传输示例

http://www.oklinux.cn  2008-01-20  ccidnet baocl  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

下面介绍一个Java基于Socket实现文件传输的示例:

1.服务器端

package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.ServerSocket; import java.net.Socket; 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辅助类

package sterning; import java.net.*; import java.io.*; 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.客户端

package sterning; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileOutputStream; public class ClientTest {private ClientSocket cs = null; private String ip = "localhost"; // 设置成服务器IPprivate 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(); }}
共2页: 上一页 1 [2] 下一页

上一篇:JAVA高级--Java中异常机制的深入研究   下一篇:JAVA进阶--使用Java进行Web开发的随想

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·JAVA进阶--使用Java进行Web开发的随想
·JAVA高级--Java中异常机制的深入研究
·Java语言常用VI高级命令集锦
·Java语言对象池技术的原理及其实现解析
·Java进阶--减少对象的创建提高java性能
·JAVA基础:一个struts hibernate入门实例
·JAVA进阶--对象的序列化和反序列化实践
·Ajax技术:构建动态的Java应用程序分析
·JAVA进阶--根据所涉及对象生成XML文档
·Java基础:编写对GC友好,又不泄漏的代码
·对Map技巧的一点总结:获得Map中的数据
·spring 2.0自定义xml 标记 (一 相关类)
·Java进阶-编写跨平台Java程序注意事项
·学习Java用于异常处理的terminate()函数
·使用isInstanceOf()测试程序对象的类型
·Java Interface 是常量存放最佳地点吗?
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Java开发下的设计模式简单说明
·JAVA语言关于字符串替换的思考
·编写高级JavaScript应用代码
·常用的JDBC连接数据库方法大全
·解决JSP开发中Web程序中文显示三种方法
·对于Spring初学者的学习建议
·Java开发编程规范大分享
·站在巨人肩膀上学好J2EE全攻略
·Java网络编程基础(四) ServerSocket类
·Java网络编程基础(三) Datagram类使用
·Java学习过程中应该深入理解的一些重点
·Java网络编程基础(二) Socket类的使用
  阅读排行
·Java语言深入--java调用C/C 的过程
·一个非常有趣的使用spring框架AOP例子
·初学者Structs中基本配置入门
·使用AJAX技术实现网页无闪自动局部刷新
·关于java中相对路径,绝对路径问题总结
·JAVA基础:一个struts hibernate入门实
·高级:lucene全文检索应用示例及代码简
·Hibernate配置文件中的映射元素详解
·关于角色访问控制(RBAC)
·快速教您Apache Tomcat SSL的配置
·使用WEBWORK实现文件上传方法实例详解
·JSP/Servlet:< jsp-config>标签使用详
·在struts里实现dtree通用树型结构讲解
·JSP JavaBean Servlet工作原理实例讲解
·在Weblogic上配置JMS服务的方法
网摘收藏: