如何使用JavaWebSocket和javafx发送文件

如何使用JavaWebSocket和javafx发送文件,java,websocket,javafx-2,Java,Websocket,Javafx 2,我的服务器端代码是 @ServerEndpoint("/chat/fileTransfer") public class ChatFileTransfer { private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>()); @OnOpen public void onOpen(Session session) {

我的服务器端代码是

@ServerEndpoint("/chat/fileTransfer")
public class ChatFileTransfer {

    private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("@ onOpen");
        sessions.add(session);
    }

    @OnClose
    public void onClose(Session session) {
        System.out.println("@ onClose");
        sessions.remove(session);
    }

    @OnMessage
    public void onMessage(ByteBuffer byteBuffer) {
        System.out.println("@ onMessage");
        System.out.println("="+byteBuffer);
        for (Session session : sessions) {
            try {
                session.getBasicRemote().sendBinary(byteBuffer);
            } catch (IOException ex) {
                ex.printStackTrace();
                Logger.getLogger(BinaryWebSocketServer.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    } 
}

我该怎么解决呢?

你检查过
文件是否为空吗?顺便问一下,您的客户机中的第125行是什么?是的,我已检查文件是否不为空。第125行是什么?读取一个文件并向他们发送小块。您可以在这里找到
@ClientEndpoint
public class JavaFXBinaryWsClient extends Application {

    private static final Logger LOGGER = Logger.getLogger(JavaFXBinaryWsClient.class.getName());
    private ImageView imageView;
    private Session session;

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("OPEN CALLED CLIENT");
        this.session = session;
    }

    @OnMessage
    public void onMessage(InputStream input) {
        System.out.println("WebSocket message Received!");
        Image image = new Image(input);
        System.out.println("image=" + image);
        System.out.println("image=" + image.getHeight());
        System.out.println("image=");

        imageView.setImage(image);
    }

    @OnClose
    public void onClose() {
        System.out.println("CLIENT CLOSE CALLED");
        connectToWebSocket();
    }

    @Override
    public void start(final Stage primaryStage) {
        System.out.println("CLIENT START");
        connectToWebSocket();
        System.out.println("CLIENT CONNECTED");

        Button btn = new Button();
        btn.setText("Send Image!");
        btn.setPrefSize(400, 27);
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                selectAndSendImage(primaryStage);
            }
        });
        imageView = new ImageView();
        imageView.setFitHeight(400);
        imageView.setFitWidth(400);
        imageView.setPreserveRatio(true);
        imageView.setSmooth(true);

        AnchorPane root = new AnchorPane();

        AnchorPane.setTopAnchor(btn, 0.0);
        AnchorPane.setLeftAnchor(btn, 0.0);
        AnchorPane.setRightAnchor(btn, 0.0);
        AnchorPane.setTopAnchor(imageView, 27.0);
        AnchorPane.setBottomAnchor(imageView, 0.0);
        AnchorPane.setLeftAnchor(imageView, 0.0);
        AnchorPane.setRightAnchor(imageView, 0.0);

        root.getChildren().add(btn);
        root.getChildren().add(imageView);

        Scene scene = new Scene(root, 400, 427);

        primaryStage.setTitle("Image push!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

    private void selectAndSendImage(Stage stage) {
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Select Image to Send");
        File file = fileChooser.showOpenDialog(stage);
        try (
                InputStream input = new FileInputStream(file);
                OutputStream output = session.getBasicRemote().getSendStream()) {

            FileReader reader = new FileReader(file);
            BufferedReader br = new BufferedReader(reader);
            byte[] buffer = new byte[1024];
            int read;
            while ((read = input.read(buffer)) > 0) {
                output.write(buffer, 0, read);
            }
        } catch (IOException ex) {
            LOGGER.log(Level.SEVERE, null, ex);
        }
    }

    private void connectToWebSocket() {
        System.out.println("CLIENT connectToWebSocket Called " + session);
        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        try {
            URI uri = URI.create("ws://localhost:9090/websocket/chat/fileTransfer");
            session = container.connectToServer(this, uri);
        } catch (DeploymentException | IOException ex) {
            LOGGER.log(Level.SEVERE, null, ex);
            System.exit(-1);
        }
        System.out.println("++" + session);
    }
}
Apr 07, 2014 11:54:02 PM javafxbinarywsclient.JavaFXBinaryWsClient selectAndSendImage
SEVERE: null
java.io.IOException: An established connection was aborted by the software in your host machine
    at sun.nio.ch.SocketDispatcher.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
    at sun.nio.ch.IOUtil.write(IOUtil.java:51)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:487)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.flushByteBuffer(TCPNIOTransport.java:915)
    at org.glassfish.grizzly.nio.transport.TCPNIOAsyncQueueWriter.write0(TCPNIOAsyncQueueWriter.java:107)
    at org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:262)
    at org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:168)
    at org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:70)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleWrite(TCPNIOTransportFilter.java:128)
    at org.glassfish.grizzly.filterchain.TransportFilter.handleWrite(TransportFilter.java:191)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:111)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.write(DefaultFilterChain.java:437)
    at org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:386)
    at org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:360)
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyWriter.write(GrizzlyWriter.java:96)
    at org.glassfish.tyrus.core.ProtocolHandler.write(ProtocolHandler.java:253)
    at org.glassfish.tyrus.core.ProtocolHandler.send(ProtocolHandler.java:144)
    at org.glassfish.tyrus.core.ProtocolHandler.send(ProtocolHandler.java:139)
    at org.glassfish.tyrus.core.ProtocolHandler.stream(ProtocolHandler.java:193)
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket.stream(GrizzlyClientSocket.java:432)
    at org.glassfish.tyrus.core.TyrusRemoteEndpoint.sendBinary(TyrusRemoteEndpoint.java:97)
    at org.glassfish.tyrus.core.OutputStreamToAsyncBinaryAdapter.write(OutputStreamToAsyncBinaryAdapter.java:78)
    at javafxbinarywsclient.JavaFXBinaryWsClient.selectAndSendImage(JavaFXBinaryWsClient.java:125)
    at javafxbinarywsclient.JavaFXBinaryWsClient.access$000(JavaFXBinaryWsClient.java:38)
    at javafxbinarywsclient.JavaFXBinaryWsClient$1.handle(JavaFXBinaryWsClient.java:79)
    at javafxbinarywsclient.JavaFXBinaryWsClient$1.handle(JavaFXBinaryWsClient.java:76)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:28)
    at javafx.event.Event.fireEvent(Event.java:171)
    at javafx.scene.Node.fireEvent(Node.java:6867)
    at javafx.scene.control.Button.fire(Button.java:179)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:193)
    at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:336)
    at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:329)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
    at javafx.event.Event.fireEvent(Event.java:171)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3311)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3151)
    at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3106)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1563)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2248)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:250)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:173)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:292)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:530)
    at com.sun.glass.ui.View.notifyMouse(View.java:924)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17)
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67)
    at java.lang.Thread.run(Thread.java:724)