Avatar billede riversen Nybegynder
27. maj 2003 - 08:29 Der er 12 kommentarer og
1 løsning

Sender objekter over netværk

har følgende klasser:

import java.util.*;
import java.io.*;
import java.net.*;

public class ObjectSender extends Thread
{
  public void run()
  {
    Vector v = new Vector();
    v.add( "HEj med dig" );
    v.add( "davs" );
    v.add( "nånå" );
   
    while ( true )
    {
      try
      {
        Socket connection = new Socket( "localhost", 10000 );
        ObjectOutputStream stream = new ObjectOutputStream(
                                            connection.getOutputStream() );

        stream.writeObject( v );
      }
      catch( Exception e )
      {
//        e.printStackTrace();
      }
    }
  }
}

-----------------

import java.util.*;
import java.io.*;
import java.net.*;

public class ObjectReceiver extends Thread
{
  public void run()
  {
    while ( true )
    {
      try
      {
        Socket connection = new ServerSocket( 10000, 100 ).accept();
        System.out.println( "Forbindelse oprettet" );
     
        ObjectInputStream stream = new ObjectInputStream(
                                            connection.getInputStream() );

        System.out.println( stream.available() );
        System.out.println( stream.readObject() );
      }
      catch( Exception e )
      {
//        e.printStackTrace();
      }
    }
  }
}

hvorfor er stream.available() hele tiden 0 ? Er der ikke en måde man kan tjekke om der er noget at modtage ligesom bufferedreader.ready(), således man ikke risikerer den hænger i readobject kaldet. Så vidt jeg kan konstaterer returnerer den ikke null, hvis ikke der er noget objekt.
Avatar billede riversen Nybegynder
27. maj 2003 - 08:33 #1
kan man evt. bruge en bufferedreader til formålet på en eller anden måde ?
Avatar billede riversen Nybegynder
27. maj 2003 - 09:10 #2
jeg har nu lavet en metode som lukker stream...så den kaster en exception...er det måden ?
Avatar billede carstenknudsen Nybegynder
27. maj 2003 - 09:39 #3
Ifølge dokumentationen returnerer available antallet af bytes der kan læses uden at der blokeres, så måske kan man blot ikke læse uden at blokere.
Avatar billede riversen Nybegynder
27. maj 2003 - 09:42 #4
den returnerer hele tiden 0
Avatar billede carstenknudsen Nybegynder
27. maj 2003 - 10:01 #5
Netop, så i dit tilfælde kan det være at du ikke kan læse mere end nul bytes uden at blokere, du kan godt læse flere bytes men ved at blokere. Der er ingen modsætning i det.
Avatar billede riversen Nybegynder
27. maj 2003 - 10:04 #6
jamen den blokerer jo ikke når jeg læser objektet ?
Avatar billede carstenknudsen Nybegynder
27. maj 2003 - 10:08 #7
Nej, men den blokerer måske andre ting. Mon ikke altid du blokerer når du læser over et netværk? Forbindelsen skal jo bevares.
Avatar billede riversen Nybegynder
27. maj 2003 - 10:16 #8
jamen er der så en anden måde ? eller kan read kaldet kun afbrydes med den exception der kastes
Avatar billede carstenknudsen Nybegynder
27. maj 2003 - 10:28 #9
Efter at du har oprettet en Socket kan du kalde metoden setSoTimeout(int) der sætter et timeout for forbindelsen således at et kald hvor du læser vil kaste en exception hvis ikke der læses indenfor timeout værdien.
Avatar billede carstenknudsen Nybegynder
27. maj 2003 - 10:38 #10
Du kan bruge connect på samme vis hvis du er bange for at der slet ikke kan opnås forbindelse, men så skal forbindelsen oprettes med connect metoden.
Avatar billede riversen Nybegynder
27. maj 2003 - 12:00 #11
setSoTimeout...selvfølgelig...læg et svar
Avatar billede carstenknudsen Nybegynder
27. maj 2003 - 12:38 #12
Det var et svar.
Avatar billede arne_v Ekspert
27. maj 2003 - 13:56 #13
Normalt (hvad pokker det så end er) så vil man have 2 tråde
i hver ende. En der skriver og en der læser. Og så lader man
den bare blocke alt det den vil.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester