这个例子是往服务端上传本地的一个图片资源,用socket类实现文件的上传
客户端程序代码:
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 UPLoad {
/**
* @param args
*/
public static void main(String[] args) {
Socket socket=null;
try {
//创建一个socket对象,并且制定上传的ip地址,以及上传的端口号
socket=new Socket("192.168.191.6", 10005);
//创建一个读取本地文件的文件流对象
FileInputStream fileInputStream=new FileInputStream("F:\\图标\\32\\a.jpg");
//用户向服务器端写入数据的流对象
OutputStream outputStream=socket.getOutputStream();
int len=0;
//创建一个缓冲区
byte[] buffer=new byte[1024];
while((len=fileInputStream.read(buffer))!=-1)
{
//写入数据
outputStream.write(buffer, 0, len);
}
//告诉服务端数据已经写入完成
socket.shutdownOutput();
//获取服务端的输入流对象
InputStream inputStream=socket.getInputStream();
byte[] bf=new byte[1024];
//读取服务端反馈的数据,
int num=inputStream.read(bf);
//把信息输出到控制台
System.out.println(new String(bf,0,num));
//关闭流,释放资源
fileInputStream.close();
outputStream.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务器端的程序实现如下:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
/**
* @param args
*/
public static void main(String[] args) {
ServerSocket serverSocket=null;
try {
//创建一个serverSocket对象,并制定端口号,这里的端口号是和客户端一致的
serverSocket=new ServerSocket(10005);
//获取到请求的socket对象
Socket socket=serverSocket.accept();
//获取流对象,用于读取数据
InputStream inputStream=socket.getInputStream();
//创建一个保存客户端上传的数据的文件流对象
FileOutputStream fileOutputStream=new FileOutputStream("D:\\server.jpg");
int len=0;
byte[] buffer=new byte[1024];
//读取文件数据
while((len=inputStream.read(buffer))!=-1)
{
//保存文件
fileOutputStream.write(buffer, 0, len);
}
OutputStream outputStream=socket.getOutputStream();
//给客户端返回一个信息
outputStream.write("上传成功!".getBytes());
//关闭流,释放资源
fileOutputStream.close();
//关闭客户端
socket.close();
//关闭服务端
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}