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 ...
随机推荐
- select count(*)和select count(1)
一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的 假如表沒有主键(Primary key), 那么count(1)比count(*)快, 如果有主键的話 ...
- Android压力测试工具——Monkey
Android压力测试工具——Monkey Monkey是运行在模拟器上和真机设备上的一段程序,它会产生用户事件的一系列伪随机流,比如点击.触摸.手势,还有很多系统级别的事件.Monkey通常是用来做 ...
- Android中的Touch事件
Android中的Touch事件处理 主要内容 Activity或View类的onTouchEvent()回调函数会接收到touch事件. 一个完整的手势是从ACTION_DOWN开始,到ACTION ...
- Android提交数据到JavaWeb服务器实现登录
之前学习Android提交数据到php服务器没有成功,在看了两三个星期的视频之后,现在终于实现了与服务器的交互.虽然完成的不是PHP端的,但是在这个过程还是学到了不少东西的.现在我先来展示一下我的成果 ...
- App开发流程之使用GCD
GCD即为Grand Central Dispatch的缩写,是一种主要用于异步处理任务的安全的高性能解决方案. 在此不对比其他异步处理技术,只记录GCD的使用及说明. 先记录一些必要的概念:线程,同 ...
- iOS开发-生成随机数
有时候我们需要在程序中生成随机数,但是在Objective-c中并没有提供相应的函数,好在C中提供了rand().srand().random().arc4random()几个函数.那么怎么使用呢?下 ...
- 【代码笔记】iOS-点击cell时候的动画翻转
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...
- HTML5 结构性标签 行内语义性标签
结构性标签: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...
- IOS开发之开发者账号遇到的bug
今天使用开发者账号过期的问题,文件显示 其实今天的问题和这个没有关系,即使上面显示此证书的签发者无效,有时候也是可以用的. 我这里情况比较奇葩,刚刚生成的开发者账号,显示还是"......无 ...
- CYQ.Data 轻量数据层之路 优雅V1.4 现世 附API帮助文档(九)
继上一版本V1.3版本发布到现在,时隔N天了:[V1.3版本开源见:CYQ.Data 轻量数据层之路 华丽V1.3版本 框架开源] N天的时间,根据各路网友的反映及自身的想法,继续修改优化着本框架,力 ...