package com.example.thinkinjava.inetwork;
import com.example.thinkinjava.inetwork.util.StreamUtils;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* <p>
* 客户端:发送一直图片给服务端
* 服务端:接收客户端发送来的图片,保存到src目录下,并回复“图片已收到”
* 客户端 服务器端
* Socket.getOutputStream Socket.getInputStream
* c1.把磁盘图片用一个文件字节数组读取, s1.通过输入流读取文件字节数组
* c2.字节数组 流入到Socket.OutputStream流里面 s2.存放路径src目录下
* s3.获取Socket.getOutputStream
* c3.获取Socket.getInputStream s4.发送消息“图片已收到” //使用字符流写入
* 读取服务器端发来的消息【图片已收到】
*
* @deprecated 注意点: 字符流才需要flush手动刷新缓冲区,字节流不需要手动刷新
* </p>
* @date 2022年12月7日
* @author xiaoxpai
*/
public class SocketTest3 {
}
//客户端
class Client3{
public static void main(String[] args) throws IOException {
//1.连接服务端,得到一个Socket对象
Socket socket = new Socket(InetAddress.getLocalHost(), 9092);
//2.创建读取磁盘的文件的输入流
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("G:\\2ha.png"));
//3.文件缓冲区在字节数组里面
byte[] bytes = StreamUtils.streamToByteArray(bufferedInputStream);
//4.获取输出流,使用缓冲流BufferedOutputStream
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
//4.1将文件的字节数组内容,写入到socket数据通道
bufferedOutputStream.write(bytes);
//回写内容给服务端socket.getInputStream
//5.关闭流
bufferedInputStream.close();
//设置写入数据的结束标志
socket.shutdownOutput();
bufferedOutputStream.close();
socket.close();
}
}
//服务器
class Server3{
public static void main(String[] args) throws IOException {
//1.监听端口
ServerSocket serverSocket = new ServerSocket(9092);
System.out.println("服务端在9092端口监听......^_^");
//2.等待客户端连接
Socket socket = serverSocket.accept();
//3.读取客户端发送的文件
//得到socket.getInputStream,
BufferedInputStream bufferedInputStream = new BufferedInputStream(socket.getInputStream());
byte[] bytes = StreamUtils.streamToByteArray(bufferedInputStream);
//4.将得到的字节数组(文件),写入到指定的路径
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("F:\\IdeaProjects\\_test-projects\\think-in-java-01\\src\\main\\resources\\upload\\s22.png"));
bufferedOutputStream.write(bytes);
bufferedOutputStream.close();
//关闭流
bufferedInputStream.close();
socket.close();
serverSocket.close();
}
public static byte[] streamToByteArray(InputStream is) throws IOException {
//创建输出流对象
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer))!=-1){
bos.write(buffer,0,len);
}
//把读取到的文件内容(文本或图片或媒体或其他)转成一个字节数组
byte[] array = bos.toByteArray();
bos.close();
return array;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Socket网络编程-文件上传
共29个文件
java:11个
xml:10个
iml:3个
需积分: 2 0 下载量 88 浏览量
2022-12-07
21:11:35
上传
评论
收藏 108KB ZIP 举报
温馨提示
Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socke
资源推荐
资源详情
资源评论
收起资源包目录
think-in-java-01.zip (29个子文件)
think-in-java-01
src
s2.png 42KB
test
test.iml 433B
java
com
example
thinkinjava
ThinkInJava01ApplicationTests.java 222B
main
resources
upload
s22.png 42KB
application.properties 1B
main.iml 515B
java
com
example
thinkinjava
finaltest
Test1.java 555B
collections
Gerbil.java 752B
Test2.java 1KB
Demo1.java 154B
ThinkInJava01Application.java 124B
inetwork
SocketTest2.java 3KB
SocketTest3.java 4KB
SocketTest.java 3KB
util
StreamUtils.java 1KB
Test1.java 2KB
.idea
dbnavigator.xml 21KB
uiDesigner.xml 9KB
gradle.xml 684B
misc.xml 454B
think-in-java-01.iml 344B
modules.xml 383B
restkit
RESTKit_HttpSetting.xml 209B
RESTKit_Setting.xml 211B
workspace.xml 7KB
.gitignore 184B
libraries
gradle_wrapper.xml 237B
inspectionProfiles
Project_Default.xml 337B
HELP.md 779B
共 29 条
- 1
资源评论
鞠崽23333
- 粉丝: 3900
- 资源: 109
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功