续上次讲过UDP传输文件,这次简要讲下关于TCP文件传输的发送端与接收端.tcp传输主要关键地方就是文件末尾的处理
发送端代码:
private void sendFile(File f) throws Exception {
oos.writeUnshared(f);
oos.writeLong(f.length());
FileInputStream fins = new FileInputStream(f);
byte[] buf = new byte[8192];
int size = 0;
while ((size = fins.read(buf)) != -1) {
oos.write(buf, 0, size);
}
System.out.println("发送方发送文件:" + f + " 完毕");
oos.flush();
fins.close();
}
接收端代码:
/**
* 处理对方发过来的文件
*/
private void doReceiveFile(String savePath) throws Exception {
File f = (File) ois.readUnshared();//文件
long len = ois.readLong();
System.out.println("接收方 收到发送方的文件:" + f + " 文件大小:" + len);
File file = new File(savePath, f.getName());
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
BufferedOutputStream fous = new BufferedOutputStream(new FileOutputStream(file));
byte[] buffer = new byte[8192];
int lengths = -1;//实现每次接收到的数组长度
int accepts = 0;//当前已经传的文件长度
int canRead = (int) (len - accepts - 8192 < 0 ? len - accepts : 8192);//处理文件末尾
while ((lengths = ois.read(buffer, 0, canRead)) > 0) {
fous.write(buffer, 0, lengths);
accepts += lengths;
canRead = (int) (len - accepts - 8192 < 0 ? len - accepts : 8192);
}
fous.close();
System.out.println("接收方接收文件完毕");
}
分享到:
相关推荐
飞秋(FeiQ)是一款局域网聊天传送文件的绿色软件,它参考了飞鸽传书(IPMSG)和QQ, 完全兼容飞鸽传书(IPMSG)协议,具有局域网传送方便,速度快,操作简单的优点,同时具有QQ中的一些功能。 功能说明: - 飞秋(FeiQ)是一款...
- 飞秋(FeiQ)是一款局域网内即时通信软件, 基于 TCP/IP(UDP). - 完全兼容网上广为流传的飞鸽传书并比原来飞鸽功能更加强大. - 不需要服务器支持. - 支持文件/文件夹的传送 (支持大文件传送[4G以上]), 发送方和接收...
- 飞秋(FeiQ)是一款局域网内即时通信软件, 基于 TCP/IP(UDP). - 完全兼容网上广为流传的飞鸽传书并比原来飞鸽功能更加强大. - 不需要服务器支持. - 支持文件/文件夹的传送 (支持大文件传送[4G以上]), 发送方和接收...
第21章 TCP的超时与重传 226 21.1 引言 226 21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 ...
作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也...
第21章 TCP的超时与重传 226 21.1 引言 226 21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 ...
第21章 TCP的超时与重传 226 21.1 引言 226 21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 ...
第21章 TCP的超时与重传 226 21.1 引言 226 21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 ...
第21章 TCP的超时与重传 226 21.1 引言 226 21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 ...
第21章 TCP的超时与重传 226 21.1 引言 226 21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 ...
第21章 TCP的超时与重传 226 21.1 引言 226 21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢...
27.3.3 文本文件传输:NVT ASCII 表示还是图像表示 325 27.3.4 异常中止一个文件的传输: Telnet同步信号 326 27.3.5 匿名FTP 329 27.3.6 来自一个未知IP地址的匿名FTP 330 27.4 小结 331 第28章 SMTP:简单邮件传送...
第21章 TCP的超时与重传 226 21.1 引言 226 21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 ...
27.3.3 文本文件传输:NVT ASCII 表示还是图像表示 325 27.3.4 异常中止一个文件的传输: Telnet同步信号 326 27.3.5 匿名FTP 329 27.3.6 来自一个未知IP地址的匿名FTP 330 27.4 小结 331 第28章 SMTP:简单邮件传送...
27.3.3 文本文件传输:NVT ASCII 表示还是图像表示 325 27.3.4 异常中止一个文件的传输: Telnet同步信号 326 27.3.5 匿名FTP 329 27.3.6 来自一个未知IP地址的匿名FTP 330 27.4 小结 331 第28章 SMTP:简单邮件传送...
第21章 TCP的超时与重传 226 21.1 引言 226 21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 ...
作者用Lawrence Berkeley实验室的tcpdump程序来捕获不同操作系统和TCP/IP实现之间传输的不同分组。对tcpdump输出的研究可以帮助理解不同协议如何工作。 本书适合作为计算机专业学生学习网络的教材和教师参考书。也...
第21章 TCP的超时与重传 226 21.1 引言 226 21.2 超时与重传的简单例子 226 21.3 往返时间测量 227 21.4 往返时间RTT的例子 229 21.4.1 往返时间RTT的测量 229 21.4.2 RTT估计器的计算 231 21.4.3 慢启动 233 21.5 ...