客户端

package com.swift.jinji;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket; /*项目需求:使用socket编写一个Java程序,要求:实现客户端上传文件到服务端,
即客户端读取本地文本文件,将文件发送至服务端,服务端将接收到的内容存放到文本文件中。*/ public class UploadClient { static int i = 1024; public static void main(String[] args) throws IOException, IOException { while (true) {
if (i < 65535) {
System.out.println(i);
Socket s = new Socket("192.168.122.35", 20000);
FileInputStream fis = new FileInputStream("d:/abc/0.jpg");
OutputStream out = s.getOutputStream();
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) != -1) {
// 这个时候下面的套接字流write写没有写-1,因为到-1就停了
out.write(buf, 0, len);
}
s.shutdownOutput();
InputStream in = s.getInputStream();
len = in.read(buf);
System.out.println(new String(buf, 0, len));
}
}
} }

服务器端需开启上传接收客户端socket才行

package com.swift.jinji;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class UploadServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(20000);
while (true) {
System.out.println("等待客户端连接");
Socket s = serverSocket.accept();
System.out.println("有客户端连接成功 " + s);
byte[] buf = new byte[1024];
int len;
File destDir = new File("d:/upload");
if (!destDir.exists()) {
destDir.mkdirs();
}
FileOutputStream fos = new FileOutputStream(new File(destDir, System.currentTimeMillis() + "_0.jpg"));
InputStream in = s.getInputStream();
while ((len = in.read(buf)) != -1) {
fos.write(buf, 0, len);
}
System.out.println("111111111111111");
OutputStream out = s.getOutputStream();
out.write("上传成功".getBytes());
s.close();
}
} }

效果就是,一瞬间会有数万张图片奔向服务器.

最新文章

  1. 冒泡排序 &amp; 选择排序 &amp; 插入排序 &amp; 希尔排序 JavaScript 实现
  2. 类模板Queue的实现
  3. android Camera 录像时旋转角度
  4. Resumable uploads over HTTP. Protocol specification
  5. GridView列的排序功能
  6. javascript,jquery(闭包概念)
  7. C++Builder和VC的比较
  8. ACCESS数据库操作教程
  9. 关于java reflect
  10. 亲测apache
  11. hdu 2460 poj 3694 (双联通+LCA)
  12. ORACLE的order by中文排序
  13. yii Query Builder (yii 查询构造器) 官方指南翻译
  14. MFC利用ADO建立access数据源 ---包括访问带access密码与不带access密码两种方式)
  15. [HDOJ2572]终曲
  16. 简单的用js打印乘法口诀表
  17. Java父线程(或是主线程)等待所有子线程退出
  18. 理解js中的作用域,作用域链以及闭包
  19. Android Studio获取开发版SHA1值和发布版SHA1值的史上最详细方法
  20. Java之static作用的全方位总结

热门文章

  1. Murano Weekly Meeting 2016.08.02
  2. 硬盘和显卡的访问与控制(三)——《x86汇编语言:从实模式到保护模式》读书笔记03
  3. DEDECMS5.5/5.6/5.7列表页调用TAG标签(热门标签)的两种方法
  4. js实现的省市县三级联动的最新源码
  5. netty之==线程模型
  6. Nodejs计时器定时执行函数
  7. 关于web.xml的welcome-file-list 配置与tomcat的关系:
  8. u-boot分析(八)----串口初始化
  9. Stuts2的 &quot;struts.devMode&quot; 设置成true后,不起作用,仍需要重启tomcat
  10. python3基础13(format的使用)