26. marts 2001 - 13:10Der er
10 kommentarer og 1 løsning
læs fil fra socket
Jeg vil gerne læse en vilkårlig fil (f.eks. \".bmp\") fra en socket forbindelse. Client bliver lavet i Visual C++ og Server (skal læse filen) laves i Java. Hvordan laver jeg et program der kan læse en fil der modtages som en strøm af bytes?
Der har jeg været, men jeg vil læse fil ikke overføre tekst mellem server og client. Det var også nemmere hvis både client og server var i Java men det er ikke teknisk muligt i dette tilfælde
Du behøver ikke være grov! Jeg ved godt jeg skal lave noget selv (det har jeg også gjort), jeg manglede bare \"the-missing-link\" mellem den stream jeg får fra client og en samlet fil modtaget på serveren
Jeg har følgende \"framework\" til løsning af problemet, men hvordan skal den modificeres til at læsen en strøm af bytes og samle dem til et billede? Protokollen kan laves som det er mest praktisk (f.eks. fil-type, bytes (selve filen) og en afslutning (eof):
class ClientWorker implements Runnable { private Socket client; private JTextArea textArea; (SKAL ERSTATTES AF BILLEDFELT)
public void run(){ String line; BufferedReader in = null; PrintWriter out = null; try{ in = new BufferedReader(new InputStreamReader(client.getInputStream())); out = new PrintWriter(client.getOutputStream(), true); } catch (IOException e) { System.out.println(\"in or out failed\"); System.exit(-1); }
while(true){ try{ line = in.readLine(); //Send data back to client out.println(line); textArea.append(line); } catch (IOException e) { System.out.println(\"Read failed\"); System.exit(-1); } } } }
class SocketThrdServer extends JFrame{
JLabel label = new JLabel(\"Text received over socket:\"); JPanel panel; JTextArea textArea = new JTextArea(); ServerSocket server = null;
public void listenSocket(){ try{ server = new ServerSocket(5555); } catch (IOException e) { System.out.println(\"Could not listen on port 5555\"); System.exit(-1); } while(true){ ClientWorker w; try{ w = new ClientWorker(server.accept(), textArea); Thread t = new Thread(w); t.start(); } catch (IOException e) { System.out.println(\"Accept failed: 5555\"); System.exit(-1); } } }
protected void finalize(){ //Objects created in run method are finalized when //program terminates and thread exits try{ server.close(); } catch (IOException e) { System.out.println(\"Could not close socket\"); System.exit(-1); } }
public static void main(String[] args){ SocketThrdServer frame = new SocketThrdServer(); frame.setTitle(\"Server Program\"); WindowListener l = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; frame.addWindowListener(l); frame.pack(); frame.setVisible(true); frame.listenSocket(); } }
det skal lige siges jeg har ikke selv testet dette. Men ud fra Java API\'en ville jeg bestemt mene det kan lade sig gøre
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.