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 ...
随机推荐
- WinForm-GridView
前端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CKXM.aspx. ...
- ftp安全设置
1.文件介绍 /etc/pam.d/vsftpd中ftpuser.user_list文件说明:(在file=后添加改文件路径)/etc/vsftpd.conf中userlist_enable.user ...
- 系统补丁对sharepoint很重要
系统补丁对sharepoint很重要,会提高sharepoint运行效率,加载速度明显变快.
- FIM2010同步用户
在需要进行同步的来源MA进行同步 在需要进行导入的来源进行导入
- java url方法解释
java 的url类中有很多get方法 以下是获取值的意义 // 首先先看一下wikipedia上关于url的一个描述 //Every HTTP URL conforms to the syntax ...
- 【代码笔记】iOS-时间选择框
一, 效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewControlle ...
- 【读书笔记】iOS-iCloud编程
一,苹果云服务-iCloud. 苹果公司斥资10亿美元在北卡罗来纳州简历数所中心-iDataCenter,该数据中心面积为50万平方英尺,也是美国最大规模的数据中心之一. 二,配置iCloud. 1, ...
- iOS开发之多线程技术——GCD篇
本篇将从四个方面对iOS开发中GCD的使用进行详尽的讲解: 一.什么是GCD 二.我们为什么要用GCD技术 三.在实际开发中如何使用GCD更好的实现我们的需求 一.Synchronous & ...
- cocoapods卸载与安装的各种坑
在mac上安装cocoapods,一路的坑啊,无数报错啊有木有! 本以为安装很简单,mac下都自带ruby,使用ruby的gem命令即可下载安装: $ sudo gem install cocoapo ...
- google 火狐 模拟显示手机页面插件
google user agent switcher扩展 火狐 user agent switcher