用Socket 传输图片出现问题了,help~~~

NewToeee 2011-07-14 04:01:56
这是服务端的代码:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

//一个简答的图片传输程序
public class ImageServer {

static ServerSocket server; //服务端
static Socket connectToClient; //至客户端的套接字连接
static ObjectInputStream inFromClient; //连接至客户端的对象输入流
static ObjectOutputStream outToClient; //连接至客户端的对象输出流

public static void main(String[] args) {

//建立连接
try {
server = new ServerSocket(8500); //服务端启用端口8500
connectToClient = server.accept(); //接受一个客户端
inFromClient = new ObjectInputStream(connectToClient.getInputStream()); //连接输入流
outToClient = new ObjectOutputStream(connectToClient.getOutputStream()); //连接输出流

System.out.println("客户端:"+connectToClient.getInetAddress().toString()+"已经连接上");
byte []buffer = new byte[1024]; //缓冲区
FileInputStream fin = new FileInputStream(new File("E:\\google.jpg")); //文件输入流
System.out.println("复制文件:"+fin.available()+" 个字节");
int length = 1;//实际读到的字节数
System.out.println("开始发送图片...");
while(length>0){ //读入文件到字节缓冲区并发送
length = fin.read(buffer, 0, 1024); //从文件输入流中读出的字节数
outToClient.write(buffer);
outToClient.flush();
}
System.out.println("发送图片结束...");
fin.close(); //关闭文件输入流
outToClient.close(); //关闭连接资源
inFromClient.close();
connectToClient.close();
} catch (IOException e) {
e.printStackTrace();
}

}
}


这是客户端的代码:
import java.net.Socket;
import java.net.UnknownHostException;

//一个简单图片传输程序
public class ImageClient {
static Socket connectToServer;//连接至服务器的套接字
static ObjectOutputStream outToServer; //对象输出流
static ObjectInputStream inFromServer; //对象输入流

public static void main(String[] args) {
try {
connectToServer = new Socket("172.20.128.236",8500); //连接至主机
outToServer = new ObjectOutputStream(connectToServer.getOutputStream()); //初始化流
inFromServer = new ObjectInputStream(connectToServer.getInputStream());

FileOutputStream fout = new FileOutputStream(new File("D:\\google.jpg")); //输出流
byte buffer[] = new byte[1024]; //缓冲区
int length = 1;
System.out.println("开始接收图片...");
while(length>0){
length = inFromServer.read(buffer, 0, 1024); //读出输入流中的字节,返回实际读出的字节数
fout.write(buffer); //输出到文件中
}
System.out.println("接收图片结束...");
fout.close(); //关闭文件输出流
inFromServer.close();
outToServer.close();
connectToServer.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}


运行完成过后,图片是能传送过去的。会有一部分(开始部分正常)乱码的问题(这个,应该是乱码吧),青一块,绿一块的。。。


还请大大们帮忙看一下。。感激。
...全文
144 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rogue117 2011-08-24
  • 打赏
  • 举报
回复
楼主找到了是什么原因吗?
tanrenzong1986 2011-07-14
  • 打赏
  • 举报
回复
socket在传输图片/文件资源时,由于一般数据较大,所以在关闭流的时候最好等传输完毕再关闭。
Fly_m 2011-07-14
  • 打赏
  • 举报
回复
肯定 是图片 没接收完,在处理数据时,要使用读取的真实数据长度,即length,write时需要使用length,以写正确的数据
NewToeee 2011-07-14
  • 打赏
  • 举报
回复
好吧~~~又解决了已经。哎唷,每次发帖都木有人跟。。

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧