从客户端上传到服务器端,其实本质上也就是复制!

package july76net;

//上传文件(文本)

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

public class Demo14 {

public static void main(String[] args) throws Exception {

Socket s = new Socket("localhost",12362);

BufferedReader br  = new BufferedReader(new FileReader("E:/你好.txt"));

PrintWriter pw = new PrintWriter(s.getOutputStream(),true);

String line;

while((line = br.readLine()) != null){

pw.println(line);

}

s.shutdownOutput();//阻塞式方法的应对,否则会一直等待!

BufferedReader br2 = new BufferedReader(new InputStreamReader(s.getInputStream()));

String str = br2.readLine();//服务器端反馈的数据

System.out.println(str);

br.close();

s.close();

}

}

服务器端

package july76net;

import java.io.BufferedReader;

import java.io.FileWriter;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class Demo15 {

public static void main(String[] args) throws Exception {

ServerSocket ss = new ServerSocket(12362);

Socket s = ss.accept();

String ip = s.getInetAddress().getHostAddress();

System.out.println(ip+".....connected!");

BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));

PrintWriter pw = new PrintWriter(new FileWriter("E:/你好2.txt"),true);//建议打印时都用打印流

String line;

while((line = br.readLine()) != null){

pw.println(line);//不可以写成是write();

}

PrintWriter out = new PrintWriter(s.getOutputStream(),true);

out.println("上传成功!");

s.close();

ss.close();

}

}

上传图片(注意图片是2进制文件,必须是字节流,否则读取不出来!);

客户端

package july76net;

import java.io.FileInputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

public class Demo16 {

public static void main(String[] args) throws Exception {

Socket s = new Socket("localhost",10256);

FileInputStream fis = new FileInputStream("E:/DSC_2451.jpg");

OutputStream os = s.getOutputStream();

byte []buf = new byte[1024];

int len;

while((len = fis.read(buf)) != -1){

os.write(buf);

}

s.shutdownOutput();

InputStream in = s.getInputStream();

byte []b = new byte[1024];

int i = in.read(b);

System.out.println(new String(b,0,i));

fis.close();

s.close();

}

}

服务器端

package july76net;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class Demo17 {

public static void main(String[] args) throws Exception {

ServerSocket ss = new ServerSocket(10256);

Socket s = ss.accept();

String ip = s.getInetAddress().getHostAddress();

System.out.println(ip+".........connected");

InputStream is = s.getInputStream();

FileOutputStream fos = new FileOutputStream("E:/我的照片0.jpg");

byte []b = new byte[1024];

int len;

while((len = is.read(b)) != -1){

fos.write(b);

}

OutputStream os = s.getOutputStream();

os.write("上传成功!".getBytes());

s.close();

ss.close();

}

}

我的总结:

对于网络编程而言,重要的是理解其步骤,按照步骤的需要,一步步搭建根基!

客户端和服务端需要交互,那么就要构建相对应的流,供其输入和输出!

对于阻塞式方法,一定要注意,提供停止标签!

对于PrintWriter ,记得用println而不是write;不要忘了加上true,自动刷新!

java 利用TCP上传文件的更多相关文章

  1. php 利用socket上传文件

    php 利用socket上传文件 张映 发表于 2010-06-02 分类目录: php 一,利用fsockopen来上传文件 以前我写过一篇关于socket通信原理的博文http://blog.51 ...

  2. 利用struts2上传文件时,如果文件名中含有-符号,那么会出错

    利用struts2上传文件时,如果文件名中含有-符号,那么会出错 报错如下: HTTP Status 500 - C:\Program Files\Apache Software Foundation ...

  3. 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...

  4. 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...

  5. SAE利用storge上传文件 - myskies的专栏 - 博客频道 - CSDN.NET

    SAE利用storge上传文件 - myskies的专栏 - 博客频道 - CSDN.NET SAE利用storge上传文件

  6. Java 利用FTP上传,下载文件,遍历文件目录

    Java实现FTP上传下载文件的工具包有很多,这里我采用Java自带的API,实现FTP上传下载文件.另外JDK1.7以前的版本与其之后版本的API有了较大的改变了. 例如: JDK1.7之前 JDK ...

  7. Java使用HttpURLConnection上传文件

    从普通Web页面上传文件非常easy.仅仅须要在form标签叫上enctype="multipart/form-data"就可以,剩余工作便都交给浏览器去完毕数据收集并发送Http ...

  8. Java使用HttpURLConnection上传文件(转)

    从普通Web页面上传文件很简单,只需要在form标签叫上enctype="multipart/form-data"即可,剩余工作便都交给浏览器去完成数据收集并发送Http请求.但是 ...

  9. 利用Struts上传文件

    在利用struts2完成上传文件到服务器时,遇到获取不到文件名 原因是在Action中的属性名没有和jsp中的属性名匹配 <%@ page language="java" i ...

随机推荐

  1. day38 18-Spring的XML和注解的结合使用

    什么情况下使用XML,什么情况下使用注解?又有XML,又有注解,开发的时候使用哪种? XML:结构清晰,配置麻烦. 注解:简单, 它俩的结合点在属性注入上. 两种方式结合:一般使用XML注册Bean, ...

  2. 【水滴石穿】react-native忽略黄色提醒

    方法一 import { YellowBox } from 'react-native'; YellowBox.ignoreWarnings(['Remote debugger']); // 忽略黄色 ...

  3. PLAY2.6-SCALA(十一) 模板常用场景

    1.布局 声明一个views/main.scala.html模板作为主布局模板 @(title: String)(content: Html) <!DOCTYPE html> <ht ...

  4. Minitab软件是现代质量管理统计的领先者,全球六西格玛实施的共同语言,以无可比拟的强大功能和简易的可视化操作深受广大质量学者和统计专家的青睐。

    Minitab软件是现代质量管理统计的领先者,全球六西格玛实施的共同语言,以无可比拟的强大功能和简易的可视化操作深受广大质量学者和统计专家的青睐. MINITAB 功能菜单包括:基础和高级统计工具: ...

  5. JMeter与LoadRunner的对比

    1. 界面.安装.协议支持.函数库.成本.开源 2. 都可以实现分布式负载,相对来说LoadRunner更强大一些 3. 都支持在windows和linux环境的负载生成器.控制台方面,Jmeter跨 ...

  6. poj1637&&hdu1956 混合欧拉回图判断

    欧拉路:经过所有路有且仅有1次,可以路过所有的点. 无向图:  图连通,所有点都是偶数度,或者只有两个点是奇数度.当所有点是偶数度时欧拉路起点可以是任意点:当有两个奇数度点时起点必须是奇数度点. 有向 ...

  7. c++ 对象池的创建

    template <class T> class ObjectPool { public: using DeleterType = std::function<void(T*)> ...

  8. Oracle(ERROR SP2-0642)

    阅读目录 报错信息 解决方法 回到顶部 报错信息 ERROR SP2-0642 回到顶部 解决方法 [oracle@oradb]$ sqlplus / as sysdba SP2-0642: SQL* ...

  9. 说说iOS与内存管理(上)

    http://www.cocoachina.com/ios/20150625/12234.html 说起内存管理,看似老生常谈,而真正掌握内存管理的核心其实并不简单.ARC/MRR以及“谁分配谁就负责 ...

  10. 看看国外的JavaScript题目

    ---恢复内容开始--- 题目一 (function(){    return typeof arguments;})(); 答案:“object” arguments是对象,伪数组有两件事要注意这里 ...