P402 TCP通信客户端
p 403 TCP 的服务器端
P 404文件上传服务器的实例
P405-407
package demo07.Net;
//p405
import java.io.*;
import java.net.Socket;
/*
* 读取本地文件,上传到服务器,读服务器回写的数据
* 数据源:H:\\1\\1.jpg
* 目的地:服务器
* */
public class TCPClinet {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("H:\\1\\1.jpg");//创建本地字节输入流
Socket socket = new Socket("192.168.1.101", 8805);//
OutputStream sos = socket.getOutputStream();//创建网络字节输出流
int len=0;
byte[] bytes=new byte[1024];
while ((len=fis.read(bytes))!=-1){//本地读,网络写
sos.write(bytes,0,len);
}
socket.shutdownOutput();
InputStream sis = socket.getInputStream();//创建网络字节输入流
while ((len=sis.read(bytes))!=-1){//网络读,打印
System.out.println(new String(bytes,0,len));
}
fis.close();
socket.close();
}
}
package demo07.Net;
//p405
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8805);
Socket socket=server.accept();
InputStream sis = socket.getInputStream();
File file=new File("H:\\3");
if (!file.exists()){
file.mkdir();
}
FileOutputStream fos = new FileOutputStream(file + "\\1.jpg");
int len=0;
byte[] bytes=new byte[1024];
while ((len=sis.read(bytes))!=-1){
fos.write(bytes,0,len);
}
socket.getOutputStream().write("成功".getBytes());
fos.close();
socket.close();
server.close();
}
}
服务器端的改进
package demo07.Net;
//p405
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8805);
while (true){
Socket socket=server.accept();
new Thread(new Runnable() {
@Override
public void run() {
try{
InputStream sis = socket.getInputStream();
File file=new File("H:\\3");
if (!file.exists()){
file.mkdir();
}
String fileName="itcast"+System.currentTimeMillis()+new Random().nextInt(9999)+".jpg";
FileOutputStream fos = new FileOutputStream(file + "\\"+fileName);
int len=0;
byte[] bytes=new byte[1024];
while ((len=sis.read(bytes))!=-1){
fos.write(bytes,0,len);
}
socket.getOutputStream().write("成功".getBytes());
fos.close();
socket.close();
}catch (Exception e){
System.out.println(e);
}
}
}).start();
}
// server.close();
}
}
P432 创建流的2种方式
P435使用流要注意
P436 map方法的使用:转换流的元素类型
P442 流的综合使用案例
P449 方法引用——数组的构造器引用
其中 ArrayBuider为 函数式接口@FunctionInterface,且其中仅含有builderArray(int length)抽象方法。别的方法调用时候会将该接口对象作为参数。并通过该接口对象调用其中的方法。