- 浏览: 50943 次
- 性别:
- 来自: 北京
最新评论
/*服务器端接收文件*/ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JFileChooser; /** * 该类用到的绑定端口初始为10000,如果绑定不成功则试另外的端口; * 绑定次数用tryBindTimes变量,表示如果绑定失败会对它加一; * 当前绑定端口由DefaultBindPort+tryBindTimes决定; * 外界系统(调用此程序的对象)可以获取当前的帮定端口; * 并告诉客户端服务的端口号以使其能正确连接到该端口上; * @author * */ public class GetFile extends Thread { // 服务套接字等待对方的连接和文件发送 ServerSocket serSocket; // 由服务套接字产生的 套接字 Socket tempSocket; // 用于读取 InputStream inSocket; // 随机访问文件 RandomAccessFile inFile = null; // 临时缓寸区 byte byteBuffer[] = new byte[1024]; // 默认用10000端口监听请求 int defaultBindPort = 10000; // 初始的绑定端口次数为0 int tryBindTimes = 0; // 当前绑定的端口号是10000默认端口 int currentBindPort = defaultBindPort + tryBindTimes; /** * @构造方法 * @抛出异常的原因是无法绑定服务的端口 * */ public GetFile(int port) throws Exception { try { // 绑定服务的端口 this.bindToServerPort(); } catch (Exception e) { e.printStackTrace(); // 绑定不成功重试 System.out.println(e.toString()); throw new Exception("绑定端口不成功!"); } // 文件选择器以当前的目录打开 JFileChooser jfc = new JFileChooser("."); jfc.showSaveDialog(new javax.swing.JFrame()); // 获取当前的选择文件引用 File savedFile = jfc.getSelectedFile(); // 已经选择了文件 if (savedFile != null) { // 读取文件的数据,可以每次以快的方式读取数据 inFile = new RandomAccessFile(savedFile, "rw"); } } /** * @监控线程 */ public void run() { try { if (this.inFile == null) { System.out.println("没有选择文件"); // 关闭服务方套接字 this.serSocket.close(); // 没有选择文件 return; } System.out.println("wait for..." + '\n' + "等待对方接入"); // 等待对方的连接 tempSocket = serSocket.accept(); // 五秒钟连不上将抛出异常 this.serSocket.setSoTimeout(5000); // 获取输入流 this.inSocket = tempSocket.getInputStream(); } catch (Exception ex) { System.out.println(ex.toString()); ex.printStackTrace(); return; } // 以下为传送文件代码和 套接字清理工作 int amount; try { while ((amount = inSocket.read(byteBuffer)) != -1) { inFile.write(byteBuffer, 0, amount); } // 关闭流 inSocket.close(); javax.swing.JOptionPane.showMessageDialog(new javax.swing.JFrame(), "已接收成功", "提示!", javax.swing.JOptionPane.PLAIN_MESSAGE); System.out.println("Get OK"); System.out.println("接收完毕!"); // 关闭文件 inFile.close(); // 关闭临时套接字 tempSocket.close(); // 关闭服务方套接字 this.serSocket.close(); } catch (IOException e) { System.out.println(e.toString()); e.printStackTrace(); } } /** * @绑定端口 * @throws Exception 抛出异常的原因是无法绑定服务的端口 */ private void bindToServerPort() throws Exception { try { // 输出绑定的端口号到当前的控制台上 System.out.println("试绑定的端口号是:" + this.currentBindPort); // 在自己的机器上开一个服务类套接字并等待发送者的连接 serSocket = new ServerSocket(this.currentBindPort); } catch (Exception e) { e.printStackTrace(); // 绑定不成功重试 System.out.println(e.toString()); // 试了不止一次了 this.tryBindTimes = this.tryBindTimes + 1; // 可查看试的次数getTryBindedTimes this.currentBindPort = this.defaultBindPort + this.tryBindTimes; // 如果试的次数超过20次 退出 if (this.tryBindTimes >= 20) { throw new Exception("无法绑定到指定端口" + '\n' + "试了太多次了!"); } // 递归的绑定 this.bindToServerPort(); } // 输出绑定的端口号到当前的控制台上 System.out.println("成功绑定的端口号是: " + this.currentBindPort); } // 获取试绑定的端口 public int getTryBindedTimes() { return this.tryBindTimes; } // 获取已经绑定的端口 public int getCurrentBindingPort() { return this.currentBindPort; } /** * @测试方法 * @param args */ public static void main(String args[]) { GetFile getFile = null; try { getFile = new GetFile(10000); } catch (Exception e) { e.printStackTrace(); System.out.println("无法传送文件!"); System.exit(1); } getFile.start(); } }
/*文件发送端*/ import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.io.RandomAccessFile; import java.net.Socket; import javax.swing.JFileChooser; /** * 在服务器端开启的情况下 实例化套接字 并发送文件 * * @author */ public class SendFile extends Thread { // 远程的IP字符串 String remoteIPString = null; // 远程的服务端口 int port; // 临时套接字 Socket tempSocket; // 发送文件用的输出流 OutputStream outSocket; // 欲发送的文件 RandomAccessFile outFile; // 发送文件用的临时缓存区 byte byteBuffer[] = new byte[1024]; /** * 构造方法仅用于选择发送文件的位置 并从外部接收远程地址和端口 * */ public SendFile(String remoteIPString, int port) { try { this.remoteIPString = remoteIPString; this.port = port; // 选择发送的文件位置 JFileChooser jfc = new JFileChooser("."); File file = null; int returnVal = jfc.showOpenDialog(new javax.swing.JFrame()); if (returnVal == JFileChooser.APPROVE_OPTION) { file = jfc.getSelectedFile(); } outFile = new RandomAccessFile(file, "r"); } catch (Exception e) { } } /** * 先决条件是服务器端先开启 * */ public void run() { try { this.tempSocket = new Socket(this.remoteIPString, this.port); System.out.println("与服务器连接成功!"); outSocket = tempSocket.getOutputStream(); int amount; System.out.println("开始发送文件..."); while ((amount = outFile.read(byteBuffer)) != -1) { outSocket.write(byteBuffer, 0, amount); System.out.println("文件发送中..."); } System.out.println("Send File complete"); javax.swing.JOptionPane.showMessageDialog(new javax.swing.JFrame(), "已发送完毕", "提示!", javax.swing.JOptionPane.PLAIN_MESSAGE); outFile.close(); tempSocket.close(); } catch (IOException e) { System.out.println(e.toString()); e.printStackTrace(); } } /** * 测试方法 * * @param args */ public static void main(String args[]) { SendFile sf = new SendFile("127.0.0.1", 10000); sf.start(); } }
发表评论
文章已被作者锁定,不允许评论。
-
JProfiler 9.X License
2015-12-03 13:50 3L-Larry_Lau@163.com#23874-hrw ... -
ExecutorService 线程池
2014-07-07 17:27 887/** * ExecutorServiceAnalyze ... -
ConcurrentHashMap分析及使用
2014-06-30 18:24 671/** * ConcurrentHashMapAnaly ... -
JAVA检测文件字符编码
2011-12-20 15:01 1439JAR: http://sourceforge.ne ... -
JAVA常用加密算法应用
2010-06-03 11:35 920一.MD5加密,常用于加密用户名密码,当用户验证时: pro ... -
使用Java实现数据报通讯过程
2010-06-03 11:32 1194数据报(Datagram)是网络层数据单元在介质上传输信息 ... -
基于JAVA的SNMP协议报文的Socket通讯
2010-06-03 11:13 33141.引言 自从八十年 ... -
使用Java控制UDP协议
2010-06-03 11:10 1298UDP协议 UDP协议的全称是用户数据报,在网络中它与TCP ...
相关推荐
0. 准备好一个服务器、一个WiFi模块、一个串口助手 1. 程序打包部署到服务器上运行 2. 实现socket多线程,监听端口1314...4. 使用串口助手发送数据,模拟数据如图“模拟数据.png”所示 爱吃凉拌辣芒果 2022年6月8日
java基于socket的文件发送与接收,有界面,有进度条,没有bug,很好理解的
可以实现群聊,私聊,文本,图片聊天。可以发送和接收文件。支持一次同时7个文件发送/接收。接收和发送文件显示发送和接收进度。
Java基于Socket实现局域网文件传输,此文件包含了Eclipse项目源码和已经打包好了的.jar文件(文件发送端和文件接收端)。 处在同一局域网内的两台主机,一台运行sender.jar文件(发送端),另一台运行receiver.jar...
当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端 当用户发送聊天信息时,服务端将会...
在开发阶段,我们将使用Java SE和Java Socket API开发基本功能,使用Java Swing开发用户界面。主要的开发任务包括: 1. 服务器端的设计和实现 2. 客户端的设计和实现 3. 用户登录和注册功能的实现 4. 好友列表和...
java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket java c++ socket
基于java的socket开发,简单的客户端程序,可向服务器发送和接受请求,并能保存成文件。
<br>接收端和发送端都需要记录文件,内容包括时间,内容,发送人; <br>接收端能够显示当前在线接收端信息,包括人员,IP,连接启动时间,持续时间; <br>日志文件可以在窗口中显示。 <br> <br>...
//读取一个字节,获得文件头信息,判断发送信息类型(head or body) switch (cmd) { case 0x1: { ///文件信息 if (buflen >= 260) { FileSize = buf.getInt(); //获取文件大小 byte[] filename = new byte[255]; ...
主程序:SFace.java和Face.java 服务器端操作说明: 1、输入本地IP和聊天通信的端口,然后建立服务器; 2、消息接收框里有客户上线与下线的提示; 3、点击“发送信息“或者按”Ctrl+Enter“快捷键向每个在线用户...
通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket 的典型应用就是 Web 服务器和浏览器:浏览器获取用户输入的 URL,向服务器发起请求,服务器分析接收到的 URL,将...
java层接收socket数据,然后传到C层用av_parser_parse2()来组帧解码H264裸流
UDP是面向非连接的,UDP传输的是数据报只负责传输信息,不保证信息一定收到,虽然安全性不如TCP(面向连接、用Socket进行通信),但是性能较好。 从简单到复杂,首先简单介绍一下怎么利用UDP实现客服端发送消息给...
Java中实现服务端和客户端传输文件的源代码,含注释
使用JAVA编写一个使用TCP协议传输文件的Socket,实现客户端向服务器端发送一个文件,服务器端接收之后按相同的文件名在指定的目录下保存文件
Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非...
// 利用网络输出流将文件传到客户端 边读边发送 int len=0; byte[] buff = new byte[1024]; while((len=fis.read(buff))!=-1){ os.write(buff, 0, len); os.flush(); } } catch (FileNotFoundException...
Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非...
最近研究了一下socket套接字 实现java多线程 断点续传文件 在网上查找了很多例子 然后学习了大家的方法 最后利用网上的例子 自己整合了一份多线程 断点续传文件的代码 并且能实现客户端发送完毕之后 接收服务器端的...