黑马程序员技术交流社区
标题:
TCP客户端上传图片出现问题
[打印本页]
作者:
youcyou
时间:
2014-5-23 19:43
标题:
TCP客户端上传图片出现问题
本帖最后由 youcyou 于 2014-5-28 11:12 编辑
代码如下,显示上传成功,文件夹唉创建正常 但是文件夹内无文件
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class PicClient {
public static void main (String args[]) throws IOException
{
Socket s = new Socket("192.168.1.108",10005);
FileInputStream fis = new FileInputStream("d:\\1.jpg");
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
byte by[] = new byte[1024];
int len=0;
while((len=fis.read())!=-1)
{
out.write(by,0,len);
}
s.shutdownOutput();
byte b[]=new byte[1024];
int num = in.read(b);
String str = new String(b,0,num);
System.out.println(str);
fis.close();
s.close();
}
}
复制代码
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class PicServer {
public static void main(String args[]) throws IOException
{
System.out.println("上传服务器开启。。。");
ServerSocket ss = new ServerSocket(10005);
while(true)
{
Socket s= ss.accept();
new Thread(new UpPic(s)).start();
}
//ss.close();
}
}
复制代码
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class UpPic implements Runnable {
private Socket s;
UpPic(Socket s)
{
super();
this.s=s;
}
public void run() {
String ip =s.getInetAddress().getHostAddress();
System.out.println(ip+"...connected");
File file = getFile("e:\\server_pic", ip);
InputStream in ;
try
{
in = s.getInputStream();
FileOutputStream fos = new FileOutputStream(file);
byte[] by = new byte[1024];
int len =0;int count=1;
while((len=in.read(by))!=-1)
{
System.out.println(count++);
fos.write(by,0,len);
}
OutputStream out = s.getOutputStream();
out.write("图片上传成功".getBytes());
fos.close();
s.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
private File getFile(String dir, String ip) {
// TODO 自动生成的方法存根
File pic_dir = new File(dir);
if(!pic_dir.exists())
{
pic_dir.mkdir();
}
int count =1;
File file = new File(ip+"_"+count+".jpg");
while(file.exists())
{
file=new File(ip+"_"+count+".jpg");count++;
}
return file;
}
}
复制代码
作者:
gentleman
时间:
2014-5-24 11:29
客户端写入那里没有把数组放进去啊。。。害的我看了半天
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class PicClient {
public static void main (String args[]) throws IOException
{
Socket s = new Socket("192.168.1.108",10005);
FileInputStream fis = new FileInputStream("d:\\1.jpg");
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
byte by[] = new byte[1024];
int len=0;
while((len=fis.read())!=-1)//这里要把by传给read()啊!!
{
out.write(by,0,len);
}
s.shutdownOutput();
byte b[]=new byte[1024];
int num = in.read(b);
String str = new String(b,0,num);
System.out.println(str);
fis.close();
s.close();
}
}
复制代码
作者:
BigKarel
时间:
2014-5-24 14:34
本帖最后由 BigKarel 于 2014-5-24 14:36 编辑
除了上面所说的一点,你的getfile方法只是创建了一个文件夹返回了一个图片格式文件,你的上传代码中并没把上传的文件写入这个文件夹,可以说没有指定生成位置。我根据你的代码改了一些,不过我也没实现上传到指定文件夹中,只是在E盘根目录下。
package client;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
public class PicClient {
public static void main(String args[]) throws IOException {
Socket s = new Socket("192.168.1.101", 10085);
DataOutputStream w = null;
DataInputStream r = null;
File file = new File("d:\\1.jpg");
r = new DataInputStream(new BufferedInputStream(new FileInputStream(
file)));
w = new DataOutputStream(s.getOutputStream());
w.writeUTF("put" + "e:\\1.jpg");
w.flush();
byte[] buf = new byte[1024];
int read = 0;
while ((read = r.read(buf)) != -1) {
w.write(buf, 0, read);
}
w.flush();
s.close();
r.close();
System.out.println("上传成功!");
}
}
复制代码
服务端
package upPic;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class UpPic implements Runnable {
private Socket s;
public UpPic(Socket s) {
super();
this.s = s;
}
public void run() {
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "...connected");
getFile("E:\\server_pic", ip);
DataOutputStream w = null;// 写Socket
DataInputStream r = null;// 读Socket
DataOutputStream writer = null;// 写文件
try {
writer = new DataOutputStream(new BufferedOutputStream(
new FileOutputStream("E:\\1.jpg")));
w = new DataOutputStream(s.getOutputStream());
w.writeUTF("E:\\1.jpg");
w.flush();
r = new DataInputStream(new BufferedInputStream(s.getInputStream()));
byte[] buffer = new byte[1024];
int read = 0;
while ((read = r.read(buffer)) != -1) {
writer.write(buffer, 0, read);
}
writer.flush();
System.out.println("上传完毕!");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private File getFile(String dir, String ip) {
// TODO 自动生成的方法存根
File pic_dir = new File(dir);
if (!pic_dir.exists()) {
pic_dir.mkdir();
}
int count = 1;
File file = new File(ip + "_" + count + ".jpg");
while (file.exists()) {
file = new File(ip + "_" + count + ".jpg");
count++;
}
return file;
}
}
复制代码
作者:
youcyou
时间:
2014-5-28 11:12
BigKarel 发表于 2014-5-24 14:34
除了上面所说的一点,你的getfile方法只是创建了一个文件夹返回了一个图片格式文件,你的上传代码中并没把 ...
多谢指点
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2