/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Argh .. Hvad gør jeg galt ? (newbie - stre~
Fra : JokeSten


Dato : 05-04-02 18:03

Hejsa
Jeg prøver at sende et billede (via multicast). Jeg vil åbne en
Fileinputstream fra serveren og på clienten il jeg gemme det i det i et
ByteInputArray.
Det virker som om at jeg sender pakker somer er større end den mængde data
som jeg har lyst til at sende. Endvidere vil min Client kun modtage den
første pakke.
JEg har tilføjet et par println til at illustrer mit problem.


Når jeg kører min Client for jeg kun følgende output :

[mb@mb Client]$ java Client
received length: 4096

men når jeg kører min Server får jeg følgende output :
[mb@mb Server]$ java Server
Nr. 1 Length of of bytes read 4096
Nr. 1 Packet Length 4096
Nr. 2 Length of of bytes read 4096
Nr. 2 Packet Length 4096
Nr. 3 Length of of bytes read 4096
Nr. 3 Packet Length 4096
Nr. 4 Length of of bytes read 2436
Nr. 4 Packet Length 4096

Koden er til Clienten er her :

MulticastSocket socket;
DatagramPacket packet;
String group = "225.4.5.6";

socket = new MulticastSocket(MPORT);
socket.joinGroup(InetAddress.getByName(group));

byte data[] = new byte[4096];
int bytesFromServer = 0;

ByteArrayInputStream inputFromServer = new ByteArrayInputStream(data);
packet = new DatagramPacket(data,data.length);

while((bytesFromServer = inputFromServer.read(data)) != -1)
{
socket.receive(packet);
data = packet.getData();
inputFromServer.read(data, packet.getOffset(), packet.getLength());

System.out.println("received length: "+packet.getLength());
}


Koden til Serveren er her :
MulticastSocket socket;
DatagramPacket packet;
String group = "225.4.5.6";

socket = new MulticastSocket();

int bytesRead = 0;
int count = 1;

byte[] buffer = new byte[4096];
FileInputStream rdFile = new FileInputStream("temp.gif");

while((bytesRead = rdFile.read(buffer)) != -1)
{
packet = new D
atagramPacket (buffer,buffer.length,InetAddress.getByName(group),MPORT);
socket.send(packet);
System.out.println("Nr. "+count+" Length of of bytes read " + bytesRead);
System.out.println("Nr. "+count+" Packet Length " + packet.getLength());
count++;
}



Hvis der var en java-haj(eller mindre fisk) der kunne fortælle mig hvad jeg
gør galt eller bare give lidt hjælp vil jeg være UTROLIG glad. Har måske
stirert mig blind på problemet. :)

JokeSten

 
 
Frederik Hansen (08-04-2002)
Kommentar
Fra : Frederik Hansen


Dato : 08-04-02 15:36

Hejsa

Jeg tror der er noget galt i din client..

(Jeg kommenterer lige hvad jeg tror der går galt)

> byte data[] = new byte[4096];

Du laver et array på 4096 bytes, som alle er 0 (zero).

> int bytesFromServer = 0;
>
> ByteArrayInputStream inputFromServer = new
ByteArrayInputStream(data);

Du laver en ByteArrayInputStream som består af 4096 bytes som alle er 0.

> packet = new DatagramPacket(data,data.length);
>
> while((bytesFromServer = inputFromServer.read(data)) != -1)

Du læser 4096 bytes fra din ByteArrayInputStream og putter dem i Data.
(bytesFromServer er altså 4096)

> {
> socket.receive(packet);

Du modtager Packet.

> data = packet.getData();

Du sætter data lig med packet data.

> inputFromServer.read(data, packet.getOffset(),
packet.getLength());

Du læser fra din ByteArrayInputStream som ikke længere indeholder nogen
data (dem har du allerede læst).

>
> System.out.println("received length:
"+packet.getLength());
> }

Jeg tror din kode skal se sådan ud :

> byte data[] = new byte[4096];
> int bytesFromServer = 0;
>
> packet = new DatagramPacket(data,data.length);
>
> ByteArrayOutputStream inputFromServer = new
ByteArrayOutputStream(); //Bemærk at det er en OutputStream
> while(true) //Du skal på en eller anden måde, finde ud af
hvornår den sidste pakke er modtaget.. (Det skal du jo styre når du
bruger UDP)
> {
> socket.receive(packet);
> data = packet.getData();
> inputFromServer.write(data, packet.getOffset(),
packet.getLength());
>
> System.out.println("received length:
"+packet.getLength());
> }


JokeSten wrote:

> Hejsa
> Jeg prøver at sende et billede (via multicast). Jeg vil åbne en
> Fileinputstream fra serveren og på clienten il jeg gemme det i det i et
> ByteInputArray.
> Det virker som om at jeg sender pakker somer er større end den mængde data
> som jeg har lyst til at sende. Endvidere vil min Client kun modtage den
> første pakke.
> JEg har tilføjet et par println til at illustrer mit problem.
>
>
> Når jeg kører min Client for jeg kun følgende output :
>
> [mb@mb Client]$ java Client
> received length: 4096
>
> men når jeg kører min Server får jeg følgende output :
> [mb@mb Server]$ java Server
> Nr. 1 Length of of bytes read 4096
> Nr. 1 Packet Length 4096
> Nr. 2 Length of of bytes read 4096
> Nr. 2 Packet Length 4096
> Nr. 3 Length of of bytes read 4096
> Nr. 3 Packet Length 4096
> Nr. 4 Length of of bytes read 2436
> Nr. 4 Packet Length 4096
>
> Koden er til Clienten er her :
>
> MulticastSocket socket;
> DatagramPacket packet;
> String group = "225.4.5.6";
>
> socket = new MulticastSocket(MPORT);
> socket.joinGroup(InetAddress.getByName(group));
>
> byte data[] = new byte[4096];
> int bytesFromServer = 0;
>
> ByteArrayInputStream inputFromServer = new ByteArrayInputStream(data);
> packet = new DatagramPacket(data,data.length);
>
> while((bytesFromServer = inputFromServer.read(data)) != -1)
> {
> socket.receive(packet);
> data = packet.getData();
> inputFromServer.read(data, packet.getOffset(), packet.getLength());
>
> System.out.println("received length: "+packet.getLength());
> }
>


--
Venlig hilsen

Frederik Hansen

Sun Certified Programmer
for the Java(tm) 2 Platform

email : frederik@roirex.dk
www : www.roirex.dk


JokeSten (12-04-2002)
Kommentar
Fra : JokeSten


Dato : 12-04-02 19:57

mange tak ... Worked like a charm :)

JokeSten

Frederik Hansen wrote:

> Hejsa
>
> Jeg tror der er noget galt i din client..
>
> (Jeg kommenterer lige hvad jeg tror der går galt)
>
> > byte data[] = new byte[4096];
>
> Du laver et array på 4096 bytes, som alle er 0 (zero).
>
> > int bytesFromServer = 0;
> >
> > ByteArrayInputStream inputFromServer = new
> ByteArrayInputStream(data);
>
> Du laver en ByteArrayInputStream som består af 4096 bytes som alle er 0.
>
> > packet = new DatagramPacket(data,data.length);
> >
> > while((bytesFromServer = inputFromServer.read(data)) != -1)
>
> Du læser 4096 bytes fra din ByteArrayInputStream og putter dem i Data.
> (bytesFromServer er altså 4096)
>
> > {
> > socket.receive(packet);
>
> Du modtager Packet.
>
> > data = packet.getData();
>
> Du sætter data lig med packet data.
>
> > inputFromServer.read(data, packet.getOffset(),
> packet.getLength());
>
> Du læser fra din ByteArrayInputStream som ikke længere indeholder nogen
> data (dem har du allerede læst).
>
> >
> > System.out.println("received length:
> "+packet.getLength());
> > }
>
> Jeg tror din kode skal se sådan ud :
>
> > byte data[] = new byte[4096];
> > int bytesFromServer = 0;
> >
> > packet = new DatagramPacket(data,data.length);
> >
> > ByteArrayOutputStream inputFromServer = new
> ByteArrayOutputStream(); //Bemærk at det er en OutputStream
> > while(true) //Du skal på en eller anden måde, finde ud af
> hvornår den sidste pakke er modtaget.. (Det skal du jo styre når du
> bruger UDP)
> > {
> > socket.receive(packet);
> > data = packet.getData();
> > inputFromServer.write(data, packet.getOffset(),
> packet.getLength());
> >
> > System.out.println("received length:
> "+packet.getLength());
> > }
>
>
> JokeSten wrote:
>
>> Hejsa
>> Jeg prøver at sende et billede (via multicast). Jeg vil åbne en
>> Fileinputstream fra serveren og på clienten il jeg gemme det i det i et
>> ByteInputArray.
>> Det virker som om at jeg sender pakker somer er større end den mængde
>> data som jeg har lyst til at sende. Endvidere vil min Client kun modtage
>> den første pakke.
>> JEg har tilføjet et par println til at illustrer mit problem.
>>
>>
>> Når jeg kører min Client for jeg kun følgende output :
>>
>> [mb@mb Client]$ java Client
>> received length: 4096
>>
>> men når jeg kører min Server får jeg følgende output :
>> [mb@mb Server]$ java Server
>> Nr. 1 Length of of bytes read 4096
>> Nr. 1 Packet Length 4096
>> Nr. 2 Length of of bytes read 4096
>> Nr. 2 Packet Length 4096
>> Nr. 3 Length of of bytes read 4096
>> Nr. 3 Packet Length 4096
>> Nr. 4 Length of of bytes read 2436
>> Nr. 4 Packet Length 4096
>>
>> Koden er til Clienten er her :
>>
>> MulticastSocket socket;
>> DatagramPacket packet;
>> String group = "225.4.5.6";
>>
>> socket = new MulticastSocket(MPORT);
>> socket.joinGroup(InetAddress.getByName(group));
>>
>> byte data[] = new byte[4096];
>> int bytesFromServer = 0;
>>
>> ByteArrayInputStream inputFromServer = new
>> ByteArrayInputStream(data); packet = new
>> DatagramPacket(data,data.length);
>>
>> while((bytesFromServer = inputFromServer.read(data)) != -1)
>> {
>> socket.receive(packet);
>> data = packet.getData();
>> inputFromServer.read(data, packet.getOffset(),
>> packet.getLength());
>>
>> System.out.println("received length:
>> "+packet.getLength());
>> }
>>
>
>


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste