TCP通信的文件上传案例:
1、客户端使用本地字节输入流读取要上传的文件。
2、客户端使用网络字节输出流,把读取的文件上传到服务器。
3、服务器使用网络字节输入流读取客户端上传的文件。
4、服务器使用本地字节输出流将读取的文件存储在硬盘上。
5、服务器使用网络字节输出流告诉客户端上传成功。
6、客户端使用网络字节输入流读取服务器端回发的消息。
7、释放资源。
客户端代码块
package net;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Demo02TCPClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",8888);
FileInputStream fis = new FileInputStream("F:\\壁纸\\崛起ing (4).jpg");
OutputStream os = socket.getOutputStream();
int len = 0;
byte[] bytes = new byte[1024];
while((len = fis.read(bytes))!=-1){
os.write(bytes,0,len);
}
socket.shutdownOutput();//添加终止序列,否则在服务器端read读不到-1终止符号,程序会陷入死循环。
InputStream is = socket.getInputStream();
while((len = is.read(bytes))!=-1){
System.out.println(new String(bytes,0,len));
}
fis.close();
socket.close();
}
}
服务器端代码块在这里插入代码片
package net;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Demo02TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(8888);
Socket socket =server.accept();
InputStream is = socket.getInputStream();
//判断G:\\yaoyao文件夹是否存在,不存在创建一个。
File file = new File("G:\\yaoyao");
if(!file.exists()){
file.mkdir();
}
FileOutputStream fos = new FileOutputStream(file+"\\1.jpg");
int len = 0;
byte[] bytes = new byte[1024];
while((len = is.read(bytes))!= -1){
fos.write(bytes,0,len);
}
socket.getOutputStream().write("上传成功".getBytes());
fos.close();
socket.close();
server.close();
}
}