当前位置: 代码迷 >> Eclipse >> 用Socket 传输图片出现有关问题了,help~
  详细解决方案

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

热度:347   发布时间:2016-04-23 18:57:31.0
用Socket 传输图片出现问题了,help~~~
这是服务端的代码:

Java code
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();        }    }}


这是客户端的代码:
Java code
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();    } }}


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


还请大大们帮忙看一下。。感激。

------解决方案--------------------
肯定 是图片 没接收完,在处理数据时,要使用读取的真实数据长度,即length,write时需要使用length,以写正确的数据
------解决方案--------------------
socket在传输图片/文件资源时,由于一般数据较大,所以在关闭流的时候最好等传输完毕再关闭。
  相关解决方案