T
totix801
Gast
Hi,
ich möchte en SWT Image über das Netzwerk verschicken. Als byte[] verpackt hab ich mir das Ganze eigendlich ganz einfach vorgestellt, aber ich habe dabei einpaar Probleme. Auf der Empfängerseite kommen komischwerweise immer nur teile der Datei an.
Hier ist der Code der beiden Teile:
Sender
Und hier der Empfänger:
Der Aufruf von System.out.println(in.read(tmp)); gibt aber komischerweise immer nur 1448 aus. Ist da vielleicht in ganz simpler Fehler, oder etwas das ich vergessen habe?
Hoffe jemand kannn helfen.
Torsten
ich möchte en SWT Image über das Netzwerk verschicken. Als byte[] verpackt hab ich mir das Ganze eigendlich ganz einfach vorgestellt, aber ich habe dabei einpaar Probleme. Auf der Empfängerseite kommen komischwerweise immer nur teile der Datei an.
Hier ist der Code der beiden Teile:
Sender
Code:
package webcam;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.graphics.Transform;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.jalimo.gstreamer.grab.FrameListener;
import org.jalimo.gstreamer.grab.Grabber;
public class Main {
public static Image constructImage(byte[] frameData, int width, int height, int bpp) {
PaletteData palette = new PaletteData(0xff0000, 0x00ff00, 0x0000ff);
ImageData data = new ImageData(width, height, bpp, palette, width*3, frameData);
return new Image(Display.getDefault(), data);
}
public static void main(String[] args) throws UnknownHostException, IOException {
final Display display = Display.getDefault();
final Shell shell = new Shell(display);
final Label l = new Label(shell, SWT.BORDER);
l.setBounds(100,100,200,200);
String myHost = "192.168.1.5";
int myPort = 3333;
Socket s = new Socket(myHost, myPort);
final BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream());
ImageData imageData = new ImageData("test.png");
Image test = new Image(display,imageData);
System.out.println(test.getImageData().data.length);
l.setImage(constructImage(test.getImageData().data, 200, 200, 24));
out.write(test.getImageData().data);
out.flush();
System.out.println("open now");
shell.open();
while (!shell.isDisposed())
display.readAndDispatch();
display.dispose();
out.close();
}
}
Und hier der Empfänger:
Code:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
public class Main {
public static void main(String[] args) throws IOException {
Display display = new Display();
Shell shell = new Shell(display);
Image image = null;
int myPort = 3333;
ServerSocket myServer = new ServerSocket(myPort);
int readMe;
System.out.println("Warte auf eingehende Verbindung auf Port " + myPort + " ....");
//System.out.println("Warte auf eingehende Verbindung ....");
Socket mySocket = myServer.accept();
System.out.println("Eingehende Verbindung aufgebaut. Bereit zum Empfang.");
BufferedInputStream in = new BufferedInputStream(mySocket.getInputStream());
byte[] tmp = new byte[120000];
System.out.println(in.read(tmp));
Label label = new Label(shell, SWT.BORDER);
label.setBounds(1,1,300,300);
label.setImage(constructImage(tmp, 200,200,24));
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
if (image != null) image.dispose();
display.dispose();
}
public static Image constructImage(byte[] frameData, int width, int height, int bpp) {
PaletteData palette = new PaletteData(0xff0000, 0x00ff00, 0x0000ff);
ImageData data = new ImageData(width, height, bpp, palette, width*3, frameData);
return new Image(Display.getDefault(), data);
}
}
Der Aufruf von System.out.println(in.read(tmp)); gibt aber komischerweise immer nur 1448 aus. Ist da vielleicht in ganz simpler Fehler, oder etwas das ich vergessen habe?
Hoffe jemand kannn helfen.
Torsten