当前位置: 代码迷 >> Eclipse >> java socket 图片传输解决方法
  详细解决方案

java socket 图片传输解决方法

热度:17   发布时间:2016-04-23 01:59:50.0
java socket 图片传输
如题所示,我想用java,通过socket实现客服端像服务器端循环的传输图片,在服务器端能够正确的获取每张图片。现在我已经实现了单张传输,也可以正常的在服务器端接收了。但是当我在客服端循环不停的发送时,服务器端就没法正常的接收,图片一直只有一张,在不停的增大,相当于全部累计在一个图片文件上面去了。该怎么正确的把客服端发送的图片分割开来,存为不同的图片呢?
我在网上查了很多相关的资料,说自定义分隔符,在服务器端根据分隔符区分;或者先发送个图片的大小再发送图片文件,在服务器端通过大小来区分。但是我在服务器端怎么才能区分获取得到的就是分隔符,或者是图片的大小呢?客服端在不停的循环发送,服务器端在循环的接收。
希望做过这方面编程的人提供帮助。最好能够有代码,因为原理我已经查了很多很多了。谢谢!
------最佳解决方案--------------------
package net;

import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class DataSocketServer {
    final public static int DEFAULT_PORT = 4848;
    final public static String FILE_DIR = "D:/";

    public static void main(String[] args) {
        ServerSocket server = null;
        try {
            server = new ServerSocket(DEFAULT_PORT);

            while (true) {
                new Thread(new RequestProcessorTask(server.accept())).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static class RequestProcessorTask implements Runnable {
        private Socket socket = null;

        public RequestProcessorTask(Socket socket) {
            this.socket = socket;
        }

        public void run() {
            try {
                boolean isEnd = false;

                BufferedInputStream in = new BufferedInputStream(socket.getInputStream());

                while (!isEnd) {
                    int d = -1;
                    StringBuilder header = new StringBuilder();

                    while ((d = in.read()) != '\r') {
                        if (d == -1) {
                            isEnd = true;
  相关解决方案