已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
服务器端:package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import .ServerSocket; import .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 bytebufferSize; 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.sooket 的Util类package sterning; import .*; 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 bytebufferSize; 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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年北京市通州区高三一模语文试卷(含答案)
- 电驱液压机械装置的制作课件
- 垂钓活动免责协议书
- 2024年医师培训心得体会
- 2024年数学认识数字教案
- 35kv线路继电保护与自动装置设计
- 6月8日世界海洋日活动方案
- 城市轨道交通应急处理教案26-项目八-恶劣天气与自然灾害应急处理-任务1 恶劣天气应急处理
- 简约绿色水果招商产品展示模板
- Honeywell安全仪表系统(SIS) 技术交流
- 酒店安全管理制度
- 【物理】物理法拉第电磁感应定律的专项培优易错试卷练习题(含答案)及详细答案
- 2025年西藏自治区中考地理试卷真题(含答案及解析)
- (2021-2025)5年高考1年模拟化学真题分类汇编专题15 有机化学基础综合题(湖南专用)
- 路桥英语面试题目及答案
- 2025年理赔专业技术职务任职资格考试(理赔员·农险理赔)历年参考题库含答案详解(5套)
- 安利业务制度讲解
- DB23∕T 3082-2022 黑龙江省城镇道路设计规程
- 甘肃省定西市市级名校2026届中考冲刺卷物理试题含解析
- 大学试用期考核管理办法
- 江苏棋牌室管理暂行办法
评论
0/150
提交评论