java 26 - 9 网络编程之 TCP协议多用户上传文件
TCP实现多用户上传文件:
需要同时给多用户上传文件,这样就得用多线程来实现。
实际上,这样的话,上传的先后顺序和速度就跟客户端的带宽有关:带宽够,就容易抢占到线程的执行权;
首先,创建个线程类:(这个线程类执行的是服务器的功能)
线程类代码:
public class UserThread implements Runnable {
// 构造方法接收对象
private Socket s;
public UserThread(Socket s) {
this.s = s;
}
public void run() {
// 把客户端的代码复制过来
// 不同的客户端传递文件,就看他们各自的带宽情况,抢占线程
try {
// 把通道内的字节流包装成字符流
BufferedReader br = new BufferedReader(new InputStreamReader(
s.getInputStream()));
// 封装文件目录
// BufferedWriter bw = new BufferedWriter(new
// FileWriter("TCPto.txt"));
// 因为上传多个文件,所以文件名字要改变
String newname = System.currentTimeMillis() + ".txt";
BufferedWriter bw = new BufferedWriter(new FileWriter(newname));
// 获取数据,并输出到文件中
String line = null;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
// 给出反馈
BufferedWriter bwr = new BufferedWriter(new OutputStreamWriter(
s.getOutputStream()));
bwr.write("你的文件上传成功!");
bwr.newLine();
bwr.flush();
// 释放资源
s.close();
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器的代码:
public class ServerDemo {
public static void main(String[] args) throws IOException {
// 创建ServerSocket对象,监听
ServerSocket ss = new ServerSocket(10010);
//有客户端上传数据就执行
while(true){
//创建Socket对象
Socket s = ss.accept();
//执行线程
new Thread(new UserThread(s)).start();
}
}
}
客户端的代码:(只改动名字那里,目前只能这样改。。。)
public class ClientDemo {
public static void main(String[] args) throws IOException {
// 创建Socket对象
Socket s = new Socket("172.19.12.233", 10010);
// 封装文件目录
BufferedReader br = new BufferedReader(new FileReader(
"InetAddressDemo.java"));
// 把通道内的字节流包装成字符流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
s.getOutputStream()));
// 获取文件中的数据,并输出给服务器
String line = null;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
//给服务器一个信号,上面的文本中的数据已经传递完毕
s.shutdownOutput();
// 接收反馈
BufferedReader brr = new BufferedReader(new InputStreamReader(
s.getInputStream()));
// 获取反馈,并输出到控制台
String line1 = null;
while ((line1 = brr.readLine()) != null) {
System.out.println(line1);
}
brr.close();
s.close();
br.close();
}
}
java 26 - 9 网络编程之 TCP协议多用户上传文件的更多相关文章
- java 26 - 8 网络编程之 TCP协议的练习
TCP练习: 1.客户端键盘录入,服务器输出文本文件 客户端代码: public class ClientDemo { public static void main(String[] args) t ...
- java 26 - 6 网络编程之 TCP协议 传输思路 以及 代码
TCP传输 Socket和ServerSocket 建立客户端和服务器 建立连接后,通过Socket中的IO流进行数据的传输 关闭socket 同样,客户端与服务器是两个独立的应用程序 TCP协议发送 ...
- java 26 - 7 网络编程之 TCP协议代码优化
上次所写的代码中,客户端和服务器端所进行的数据传输所用的是字节流. 优化: A:这次,为了高效,对这个字节流通过转换流来进行包装,包装成高效字符流. B:这次,传输的数据是通过键盘录入的数据. 服务器 ...
- java 26 - 8 网络编程之 TCP协议上传图片
上次的是上传TXT文件,这次上传的是图片.同样,上传成功需要反馈给客户端. 区别: TXT文件用记事本打开,我们可以看得懂,所以用了缓冲字符流,对通道内的字节流进行包装了. 而图片用记事本打开,我们看 ...
- 网络编程之TCP协议怎么使用?
TCP 通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器会写的数据 表示客户端的类: java.net.Socket;此类实现客户端套接字.套接字是两台机器间通信的端点 套接字:包含了 ...
- android网络编程之HttpUrlConnection的讲解--上传大文件
1.服务器后台使用Servlet开发,这里不再介绍. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ...
- 网络编程之tcp协议以及粘包问题
网络编程tcp协议与socket以及单例的补充 一.单例补充 实现单列的几种方式 #方式一:classmethod # class Singleton: # # __instance = None # ...
- 网络编程之TCP协议与UDP协议
了解网络就要了解一些基本的协议今天主要跟大家分享一些关于TCP 协议UDP协议的相关知识 首先介绍一下TCP协议 TCP(Transmission Cintrol Protocol)可靠的.面向连接的 ...
- java 网络编程之TCP通信和简单的文件上传功能
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
随机推荐
- 奇葩问题:This file could not be checked in because the original version of the file on the server was moved or deleted. A new version of this file has been saved to the server, but your check-in comments were not saved
"This file could not be checked in because the original version of the file on the server was m ...
- -[UIViewController _loadViewFromNibNamed:bundle:]
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewC ...
- Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解
Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...
- iOS中sqlite版本号
https://github.com/yapstudios/YapDatabase/wiki/SQLite-version-(bundled-with-OS) https://github.com/y ...
- 内存管理范围和@property
管理范围: 管理任何继承NSObject的对象,对其他的基本数据类型无 效 本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于 栈中,而对象存储于堆中,当代码块结束时这个 ...
- cocoapod-使用cocoapod安装AFNetworking3.0
1. 在终端用cd命令加入到工程目录下,用命令:touch Podfile创建一个Podfile文件. 2. Podfile文件: #source 'https://github.com/CocoaP ...
- 1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识
要看懂设计模式,你需要懂类图(Class Diagram),也需要懂一点对象图(Object Diagram),下面介绍一些UML的必要知识,以便你学习设计模式. 属性.操作 下图简单介绍类的属性和操 ...
- Java Se:自定义ClassLoader
JVM是如何知道java.lang包中的类的?JVM又是如何知道我们应用中的类的?我们的应用中明明是有某个类, 但是JVM却抛出ClassNotFoundException,这是为什么?XxxImpl ...
- Runtime.exec() sucks!!!!
自己项目中使用到了 Runtime rt = Runtime.getRuntime(); Process p = rt.exec("query session");p.waitFo ...
- 数据库 SQL Server 到 MySQL 迁移方法总结
最近接手一起老项目数据库 SQL Server 到 MySQL 的迁移.因此迁移前进行了一些调查和总结.下面是一些 SQL Server 到 MySQL 的迁移方法. 1. 使用 SQLyog 迁移 ...