【需求】
通过TCP技术,上传图片
【技术】
Java,TCP
【代码】
客户端
package network_tcp_uploadpicture;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class UploadClient {
/**
*
* @param args
* @throws UnknownHostException
* @throws IOException
*/
public static void main(String[] args) throws UnknownHostException, IOException {
/*
* 客户端:
* 1、创建socket服务端对象
* 2、获取文件位置
* 3、获取socket服务端输出流
* 4、将文件发送给服务端
* 5、因为传的是图片,所以需要字节流
*/
//创建socket客户端对象
Socket s = new Socket("localhost",10005);
//获取上传文件的位置
File file = new File("C:\\Users\\Administrator\\Desktop\\图片\\01.png");
//文件转换为字节流
FileInputStream fileIn = new FileInputStream(file);
//创建socket服务端输出流
OutputStream out = s.getOutputStream();
//将文件发送给服务端
int len=0;
byte[] buf=new byte[1024];
while((len=fileIn.read(buf))!=-1){
out.write(buf,0,len);
}
s.shutdownOutput();
//读取服务端发回的内容。
InputStream in = s.getInputStream();
byte[] bufIn = new byte[1024];
int lenIn = in.read(buf);
String text = new String(buf,0,lenIn);
System.out.println(text);
fileIn.close();
s.close();
}
}
服务端
package network_tcp_uploadpicture;
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {
/*
* 服务端:
* 1、创建serversocket服务端对象
* 2、获取socket对象
* 3、获取socket对象的输入流
* 4、创建文件输出路径
* 5、将文件写到目的地
* 6、获取socket对象的输出流,输出响应
*/
/**
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//创建服务端对象
ServerSocket ss = new ServerSocket(10005);
//获取客户端对象
Socket s = ss.accept();
//获取客户端IP
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+".......connected");
//获取socket输入流
BufferedInputStream bufsIn = new BufferedInputStream(s.getInputStream());
//创建文件输出路径
FileOutputStream out = new FileOutputStream("C:\\\\Users\\\\Administrator\\\\Desktop\\\\图片\\"+ip+".png");
//将文件写道目的地
int len = 0;
byte[] buf = new byte[1024];
while ((len = bufsIn.read(buf))!=-1) {
out.write(buf,0,len);
}
// 获取socket输出流,将上传成功字样发给客户端。
OutputStream outToSocket = s.getOutputStream();
outToSocket.write("上传成功".getBytes());
out.close();
s.close();
ss.close();
}
}
【截图】
客户端
服务端
源文件
执行后