首页 / JAVA / java-服务器技术-图片上传小程序
java-服务器技术-图片上传小程序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-服务器技术-图片上传小程序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3885字,纯文字阅读大概需要6分钟。
内容图文
壁画不多说
客户端:
import java.io.*;
import java.net.Socket;
public class UploadPicClient {
public static void main(String[]args) throws IOException {
//1,创建socket
Socket s = new Socket("192.168.43.5",10007);//我的Ip地址是192.168.43.5,自己传自己
//2,读取源图片。
File picFile = new File("") ;
FileInputStream fis = new FileInputStream(picFile);
//3,目的是socket输出流。
OutputStream out = s. getOutputStream();
byte[] buf = new byte [1024];
int len = 0;
while((len=fis. read (buf)) !=-1) {
out. write (buf, 0, len) ;
//告诉服务器端图片数据发送完毕,不要等着读了。
s. shutdownOutput() ;
/**
* 单向关闭流,防止服务端无线循环读取数据。(结束标记)
*/
//读取.上传成功字样。
InputStream in = s.getInputStream();
byte[] bufIn = new byte [1024];
int lenIn = in. read (bufIn) ;
System. out. println (new String (bufIn, 0, lenIn));
//关闭。
fis.close() ;
s.close() ;
}
}
}
服务端:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadPicServer {
public static void main(String[] args) throws IOException {
//创建服务器
ServerSocket serverSocket = new ServerSocket(10007);
while (true) {//循环,可多次上传图片
Socket socket = serverSocket.accept();//阻塞状态,等待下一个socket
InputStream fis = socket.getInputStream();//getInputstream();返回的是InoutStream的对象所以要用超类
String s=socket.getInetAddress().getHostAddress();
System.out.println(s+"......connect");
File dir=new File("e:\\UploadPics");
if(!dir.exists())
{
dir.mkdir();
}
int counter=1;
File fIle = new File(dir,s+"("+counter+")"+".ipg");//为了解决一个人上传多张照片重命名的问题,我们使用iP地址以及计数器来编号
while(fIle.exists())//第一次创建文件,但是没有写入,所以为假,不执行。
{
counter++;
fIle =new File(dir,s+"("+counter+")"+".ipg");
}
FileOutputStream fileOutputStream = new FileOutputStream(fIle);//创建流
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, len);//写入数据,使文件不为空
}
//给客户回消息
OutputStream out = socket.getOutputStream();
out.write("上传成功".getBytes());
//关闭资源
socket.close();//关闭客户端
fileOutputStream.close();//关闭文件输出流
}
}
}
/**
* 问题就来了,虽然解决的一个人传多张图片命名的问题,但是,如果张三连接着服务器正在传输图片的时候,李四也想传,连接了服务器,但是他不能传
* 因为,服务器的主线程正在传张三的图片
* 所以,要考虑使用并发访问,也就是多线程技术。
*/
服务端改进,满足多个用户同时进行传输:
public class UploadPicServer {
public static void main(String[] args) throws IOException {
//创建服务器
ServerSocket serverSocket = new ServerSocket(10007);
while (true) {//循环,可多次上传图片
Socket socket = serverSocket.accept();//阻塞状态,等待下一个socket
new Thread(new UploadPic(socket)).start();
}
}
}
import java.io.*;
import java.net.Socket;
public class UploadPic implements Runnable {
private Socket socket;
public UploadPic(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
InputStream fis = socket.getInputStream();//getInputstream();返回的是InoutStream的对象所以要用超类
String s = socket.getInetAddress().getHostAddress();
System.out.println(s + "......connect");
File dir = new File("e:\\UploadPics");
if (!dir.exists()) {
dir.mkdir();
}
int counter = 1;
File fIle = new File(dir, s + "(" + counter + ")" + ".ipg");//为了解决一个人上传多张照片重命名的问题,我们使用iP地址以及计数器来编号
while (fIle.exists())//第一次创建文件,但是没有写入,所以为假,不执行。
{
counter++;
fIle = new File(dir, s + "(" + counter + ")" + ".ipg");
}
FileOutputStream fileOutputStream = new FileOutputStream(fIle);//创建流
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, len);//写入数据,使文件不为空
}
//给客户回消息
OutputStream out = socket.getOutputStream();
out.write("上传成功".getBytes());
//关闭资源
socket.close();//关闭客户端
fileOutputStream.close();//关闭文件输出流
}catch (IOException i)
{
}
}
}
极致的口臭
发布了6 篇原创文章 · 获赞 1 · 访问量 81
私信
关注
内容总结
以上是互联网集市为您收集整理的java-服务器技术-图片上传小程序全部内容,希望文章能够帮你解决java-服务器技术-图片上传小程序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。