这是服务端的代码:
- 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在传输图片/文件资源时,由于一般数据较大,所以在关闭流的时候最好等传输完毕再关闭。