7 TCP 传输文件
客户端 ,服务端:可以相互传输数据
package Internet;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
// 管道流
public class Test07_Client {
public static void main(String[] args) throws IOException {
// 连接服务端
Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),10086);
// 客户端-->服务端
// 输出流和 读取文件
OutputStream os = socket.getOutputStream();
FileInputStream fis = new FileInputStream(new File("alxy.jpg"));// 读入文件
// 将文件传输出去,客户端-->服务端
byte[] buffer = new byte[1024];
int length;
while ((length= fis.read(buffer))!=-1){ // 将文件读到缓冲区
os.write(buffer,0,length); // 写出去
}
// 通知服务端,我已经输出完了
System.out.println("客户端-->服务端:传输");
socket.shutdownOutput();
// 再次传输 服务端-->客户端
InputStream is = socket.getInputStream(); // 读进来
ByteArrayOutputStream baos = new ByteArrayOutputStream(); //将读进来的内容变成新的对象
byte[] buffer2 =new byte[1024];
int length2;
while ((length2=is.read(buffer2))!=-1){
baos.write(buffer2,0,length2);
}
/* while ((length=is.read(buffer))!=-1){ // 更新buffer,不行?
baos.write(buffer);
}*/
System.out.println(baos.toString());
socket.shutdownInput();
// 关闭
os.close();
fis.close();
socket.close();
}
}
/////////////////////////////////////////////////////////////
package Internet;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Test07_Server {
public static void main(String[] args) throws IOException {
// 创建服务端
ServerSocket serverSocket = new ServerSocket(10086);
Socket socket=serverSocket.accept(); // 等待连接
// 客户端-->服务端
InputStream is = socket.getInputStream(); // is读入os
FileOutputStream fos = new FileOutputStream("beauty.jpg"); // 接收文件->将文件输出
byte[] buffer = new byte[1024];
int length;
while ((length= is.read(buffer)) != -1){ // 缓冲区读取输入流
fos.write(buffer); // 将缓冲区写到文件
}
// 通知客户端,我已经接收完了
System.out.println("客户端-->服务端:接收");
socket.shutdownInput();
// 再次传输 服务端-->客户端
OutputStream os = socket.getOutputStream();
os.write("服务端-->客户端: 接收".getBytes());
System.out.println("服务端-->客户端:传输");
socket.shutdownOutput();
// 关闭
is.close();
fos.close();
socket.close();
serverSocket.close();
}
}