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 ...
随机推荐
- 对抽屉效果几大github第三方库的调研
在公司项目新版本方案选择中,对主导航中要使用的抽屉效果进行了调研.主要原因是旧的项目中所用的库ECS评价不是很好.现对当下比较火的几大热门抽屉效果的第三方库进行了调研.代码全部选自github 如果你 ...
- Map集合概述
java集合最后一站之Map,给自己的总结画个句号... Map用于保存具有映射关系的数据. 1.HashMap和Hashtable实现类 HashMap和Hashtable都是Map接口的典型实现类 ...
- Activity与Service进行数据交互
Android启动Service有两种方法,一种是startService,一种是bindService.生命周期如下: 执行startService时,调用者如果没有stopService,Serv ...
- 【CoreData】多个数据库使用
在实际开发中,往往需要每个模块使用不同数据库,而CoreData也具备这样的功能,使用起来也很方便: 首先我们创建2个模型文件(School和Educationist) // 1.创建模型文件 (相当 ...
- 普通View的measure流程
对于普通的view,其测量在ViewGroup中的measureChildWithMargins函数中调用child view的measure开始测量. 1:从measure函数开始 public f ...
- mac 终端 常用指令
开始正式研究ios 应用开发,由于是从C开始学起,所以学习下常用的mac终端指令,方便后续常用操作. mac 终端 常用指令: 1.ls指令 用途:列出文件 常用参数 -w 以简洁的形式列出所有文件和 ...
- Win8&Win2012R2如何支持DOTA2输入法
微软自带的拼音和五笔就不用看了,没研究过,下面的方法应该不支持. 其实方法很简单运行下ctfmon.exe就可以了,这个原来旧输入模式的基础,测试可以支持QQ五笔. PS:使用拼音输入法的用户可以直接 ...
- 对于Kindle的分析
因为朋友的推荐,半年前开始接触Kindle,一直在使用Kindle读书.Kindle是亚马逊旗下的电子阅读app,可以在手机或平板电脑上下载使用.Kindle需要使用用户个人的亚马逊账号登陆,在亚马逊 ...
- JAVA 8 函数式接口 - Functional Interface
什么是函数式接口(Functional Interface) 其实之前在讲Lambda表达式的时候提到过,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法. 这种类型的接 ...
- @OneToMany---ManyToOne
http://blog.csdn.net/gebitan505/article/details/22619175 一对多,字段只是在多的一方,SQL数据库和JAVA中不同 SQL数据库表: 多的一方: ...