教育路上
摘要:Java TCP 案例 文件上传 ,要使用 TCP 协议来实现。接下来通过一个案例来实现图片上传的功能,首先编写服 务器端程序,。以下是我们为大家整理的,相信大家阅读完后肯定有了自己的选择吧。
2022-05-18 16:40网络推荐
运行结果如图 13-21 所示。
例 13-13 中创建一个 ServerSocket 对象在 while(true)无限循环中调用 ServerSocket
的 accept()方法来接收客户端的请求,每当和一个客户端建立 Socket 连接后就开启一个新
的线程和这个客户端进行交互。开启的新线程是通过实现 Runnable 接口创建的,重写 run()
方法中实现了服务器端接收并保存客户端上传图片的功能在代码的第 24 行,对上传图片的
保存目录用一个 File 对象进行封装,如果这个目录不存在就调用 File 的 mkdir()方法创建
这个目录。为了避免存放的图片名重复而造成新上传的图片把已存在的图片覆盖,在代码的
第 21 行定义了一个整型变量 count,用于统计图片的数目,使用"IP 地址(count).jpg"作
为上传图片的名字。在代码的第 30~33 行对表 count++。最后将从客户端接收的图片信息写
人到指定的日录中,在代码的第 40 行和第 41 行获得服务器端的输出流,向客户端输出"上
传成功"信息。通过图 13-21 运行结果可以看出,服务器端进人阻塞状态,等待客户端连接。
完成了服务器端程序的编写,下面来编写客户端上传程序,如例 13-14 所示。
例 13-14 Example08.java
import java.io.*;
import java.net.*;
public class Example08 {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 10001); // 创建客户端 Socket
OutputStream out = socket.getOutputStream(); // 获取 Socket 的输出流对象
// 创建 FileInputStream 对象
FileInputStream fis = new FileInputStream("D:\\1.jpg");
byte[] buf = new byte[1024]; // 定义一个字节数组
int len; // 定义一个 int 类型的变量 len
while ((len = fis.read(buf)) != -1) { // 循环读取数据
out.write(buf, 0, len);
}
socket.shutdownOutput(); //关闭客户端输出
流
InputStream in = socket.getInputStream(); // 获取 Socket 的输入
流对象
byte[] bufMsg = new byte[1024]; // 定义一个字节数
组
int num = in.read(bufMsg); //接收服务端的信
息
String Msg = new String(bufMsg, 0, num);
System.out.println(Msg);
fis.close(); // 关键输入流
对象
socket.close(); // 关闭
Socket 对象
}
}
运行结果如图 13-22 所示。
例 13-14 中,首先在代码的第 5 行创建 Socket 对象,指定连接服务器的 IP 地址和端口 号,然后获取 Socket 的输出流对象。在代码的第 7~13 行,创建 FilelnputStream 对象读取 图片 1.jpg,并通过 Socket 的输出流对象向服务器端发送图片。发送完毕后调用 Socket 的 shutDownOutput()方法关闭客户端的输出流。需要注意的是,shutDownOutput()方法非常重 要,因为服务器端程序在 while 循环中读取客户端发送的数据,当读取到-1 时才会结束循环, 如果在客户端不调用 shutDownOutput()方法关闭输出流,服务器端就不会读到-1,而会一直 执行 while 循环,同时客户端读取服务器端数据的 read(byte [])方法也是个阻塞方法,这样 服务器端和客户端程序进入了一个“死锁”状态,两个程序都不能结束。 客户端上传图片成功后,会读取服务器端发送的“上传完毕”信息,至此,客户端程序的 编写也完成了。为了证实图片是否上传成功,进入 D:\\upload 目录下,在该目录下可以看 见一张以 IP+count 编号命名的图片,说明图片上传成功,如图 13-23 所示。
访客的评论 2023/12/09 19:32
文中描述的是准确的吗,如何报名!